Пока я создаю файл заголовка C++, я объявляю заголовочный файл как;why headerFileName_H
/*--- Pencere.h ---*/
#ifndef PENCERE_H
#define PENCERE_H
Я хочу узнать, почему мне нужно написать подчеркивание.
Пока я создаю файл заголовка C++, я объявляю заголовочный файл как;why headerFileName_H
/*--- Pencere.h ---*/
#ifndef PENCERE_H
#define PENCERE_H
Я хочу узнать, почему мне нужно написать подчеркивание.
Вам не нужно использовать, чтобы использовать подчеркивание, это просто соглашение о разделении имени заголовка и расширения. Вы не можете использовать литерал .
, так как это недопустимо в идентификаторе, поэтому вы заменяете его значком подчеркивания, который действителен.
Причина, по которой вы на самом деле это сделаете, как охранник. Все содержимое файла что-то вроде:
#ifndef PENCERE_H
#define PENCERE_H
// Your stuff goes here.
#endif
, так что, если вы случайно включить его дважды:
#include "pencere.h"
#include "pencere.h"
вы не получите все в нем дублируется. Двойные включения, как правило, более тонкие, чем - например, вы можете включить pax.h
и diablo.h
в ваш код и pax.h
также включает в себя diablo.h
для своих целей:
main.c:
#include "pax.h"
#include "diablo.h"
// Other stuff
pax.h:
#ifndef PAX_H
#define PAX_H
#include "diablo.h"
// Other stuff
#endif
diablo.h:
#ifndef DIABLO_H
#define DIABLO_H
typedef int mytype;
#endif
В этом случае, если включают охранники weren» t там вы бы попытались скомпилировать строку typedef int mytype;
дважды в вашей программе. Один раз для main.c -> pax.h -> diablo.h
и снова для main.c -> diablo.h
.
С включает охрану, символ препроцессора DIABLO_H
определяется при main.c
включает в себя diablo.h
поэтому #define
и typedef
не обрабатываются.
Это особое отображение файлов заголовков к #define
имен ломается в ситуации, когда у вас есть dir1/pax.h
и dir2/pax.h
, так как они оба используют PAX_H
. В этом случае для решения проблемы вы можете использовать схему, например DIR1_PAX_H
и DIR2_PAX_H
.
Подчеркнутый не нужен, это всего лишь способ создания строки для защитного ограждения, который вряд ли будет создан где-либо еще и будет затруднять обнаружение проблем. Более того, вы можете выбрать любой символ для защитника включения, если он не будет определяться нигде.
Это потому, что вы не можете #define PENCERE.H
Вы можете определить, что вы хотите, но, используя формат, используя имя файла, заменив .
с _
означает, что вы не должны конфликтовать #defines, что охранник импортерам тот же заголовок файл дважды.
Вам не нужно писать подчеркивание. Все, что вам нужно, это символ препроцессора, который больше нигде не определен. Если вам нравится (и/или если у вас есть Паскаль фон; -}) можно также сказать
/*--- Pencere.h ---*/
#ifndef THE_PENCERE_HEADER_FILE_WAS_INCLUDED
#define THE_PENCERE_HEADER_FILE_WAS_INCLUDED
..or '#ifndef _a176b657147fd4fef91379addff65aea', если вы сложите все виды материала в хэш, шансы вы не столкнетесь с проблемой использования util.h в разных модулях ... – falstro