Ако името на файла е
затворено в двойни кавички се подразбира, че това е заглавен файл, създаден от
потребителя. Търсенето му започва от текущата директория. Ако не бъде намерен
там се преглежда множеството на предварително дефинираните местоположения.
Опцията -I също работи със заглавни файлове, дефинирани от
потребителя.
Всеки включен файл може също да съдържа директива #include.
Поради това е възможно даден заглавен файл да бъде включен неколкократно в
изходен файл. Могат да бъдат използувани условни директиви за да се предотврати
многократната обработка на даден заглавен файл. Например,
#ifndef
STRING_H
#define STRING_H
/* String.h contents go here
*/
#endif
Условната директива #ifndef приема стойност истина, когато
името, което следва не е дефинирано все още. Когато условната директива приеме
стойност true съвкупността от редове до #endif се считат включени. Ако условната
директива приеме стойност false, тези редове ще бъдат
игнорирани.
Директивата #define дефинира името, което я следва. В този
случай тя дефинира STRING_H. Ако заглавният файл String.h се включва отново
директивата #ifndef ще приеме стойност false и съдържанието на Stream.h няма да
бъде включено повторно. Директивата #ifdef приема стойност true, когато името,
записано след нея, е дефинирано. Например,
#ifdef u3b2
/* system
specific code
for AT&T 3B ocmputers goes here */
#endif
#ifdef
sun
/* system spesific code
for Sun computers goes here
*/
#endif
С++ предварително дефинира името __cplusplus (две
подчертаващи тиренца). Потребител, който желае да смесва програми, написани на С
и С++, трябва да запише следното:
#ifdef __cplusplus
extern min( int,
int );
int *pi = new int;
#else
extern min();
int
*pi;
#endif
Операторите между директивите #else и #endif ще бъдат
включени ако директивата #ifdef приеме стойност true. Предпроцесорът е тясно
свързан с езика С (често се нарича cpp, С - пред-процесор). Много реализации
просто използуват предпроцесора на С и следователно не разпознават коментара на
С++, ограничаван от //. Ако желаете да включите коментар в директива #define
по-безопасно е да използувате обичайния за С коментар.
#ifdef
u3b2
#define SYSV /* UNIX System V */
#endif
#include
void read() { cout pact() { cout n"; }
void write() { cout n() {
read();
sort();
compact();
write();
return 0;
}
При мен С ми извежда грешка още в първия ред, демек при #include