Saya telah melihat kode seperti ini biasanya di awal file header:
#ifndef HEADERFILE_H
#define HEADERFILE_H
Dan pada akhir file tersebut
#endif
Apa tujuan dari ini?
c++
c
c-preprocessor
Asad Khan
sumber
sumber
#pragma
itu: mengaktifkan fitur khusus-kompiler. Meskipun#pragma once
ini sangat didukung secara luas, itu tidak standar.info cpp
atau lihat di sini ) mengatakan "itu tidak dikenali oleh semua preprosesor, jadi Anda tidak dapat mengandalkannya dalam program portabel.". Dan GNU cpp mengoptimalkan#ifndef
idiom umum dan portabel sehingga seefisien itu#pragma once
.#ifndef HEADERFILE_H
dapat melanggar namespace implementasi dari nama header terjadi untuk memulaiE
; pengidentifikasi dimulai denganE
dan digit atau huruf besar disediakan untuk<errno.h>
. Saya sarankan#ifndef H_HEADERFILE
.Jawaban:
Itu disebut penjaga #include .
Setelah tajuk dimasukkan, ia memeriksa apakah ada nilai unik (dalam hal ini
HEADERFILE_H
) ditentukan. Kemudian jika itu tidak didefinisikan, ia mendefinisikannya dan berlanjut ke sisa halaman.Ketika kode dimasukkan lagi, yang pertama
ifndef
gagal, menghasilkan file kosong.Itu mencegah deklarasi ganda pengidentifikasi apa pun seperti tipe, enum dan variabel statis.
sumber
#pragma once
yang melakukan hal yang sama :-)#pragma once
is : tidak portabel;#ifndef
idiom umum direkomendasikan.#ifndef
memeriksa apakah token yang diberikan#defined
lebih awal dalam file atau dalam file yang disertakan; jika tidak, itu termasuk kode antara itu dan penutupan#else
atau, jika tidak#else
ada,#endif
pernyataan.#ifndef
sering digunakan untuk membuat file header idempoten dengan mendefinisikan token setelah file dimasukkan dan memeriksa bahwa token tidak diatur di bagian atas file itu.sumber
#ifndef H_HEADER_NAME
.Ini mencegah dari dimasukkannya banyak file header yang sama beberapa kali.
Misalkan Anda telah memasukkan file header ini dalam beberapa file. Jadi pertama kali __COMMON_H__ tidak didefinisikan, itu akan didefinisikan dan menyertakan file header.
Lain kali __COMMON_H__ didefinisikan, jadi tidak akan disertakan lagi.
sumber
Mereka disebut ifdef atau termasuk penjaga.
Jika menulis sebuah program kecil, sepertinya itu tidak diperlukan, tetapi ketika proyek bertambah, Anda dapat dengan sengaja atau tidak sengaja memasukkan satu file berkali-kali, yang dapat menghasilkan kompilasi peringatan seperti variabel yang sudah dideklarasikan.
Jika tidak dinyatakan yang berarti #ifndef menghasilkan true maka hanya bagian antara #ifndef dan #endif dieksekusi jika tidak. Ini akan mencegah dari lagi menyatakan pengidentifikasi, enum, struktur, dll ...
sumber