CPP предпроцесорни в заглавните файлове
Включи файл е файл, който съдържа дефиниции на функции и променливи, както и макроси, заедно с някои оригинални файлове. За използване в програма заглавни файлове, използвани предпроцесорни директива "#include".
Обикновено включва файлове, завършващи на ".h" и да се избегне използването на други стандарти.
Както потребителските файлове и системните файлове са включени в програмата, като се използва "# включват" директивата предпроцесорни. Тя има три варианта:
Тази модификация се използва за свързване на системните файлове. Когато се изпълнява търсене на файл с име на списъка с файлове от директориите зададени предварително, а след това в системните директории подразбиране. С опцията "-I" определя директории за търсене на файлове за включване. "-nostdinc" опция в стандарт забранява каталозите на търсене на системата и търси само указаните директории.
ФАЙЛ аргумент не може да съдържа символа ">", въпреки че тя може да съдържа символа "<'.
Тази модификация се използва за включване на файлове за потребителските програми. Първо Файл се гледа в текущата директория, а след това в продължение на системата включва файлове директория. Текущият каталог е текущия файл се обработва. Той може да се види на първо място, тъй като се предполага, че има файлове, свързани с текущия файл се обработва. (Ако не е посочен опцията "-I-", текущата директория.)
ФАЙЛ аргумент не може да съдържа на героите ". Обратно наклонена черта герои се третират като отделни герои, а не началото на поредицата бягство. По този начин, директива" #include "х \ н \\ у" "показва името на файла, съдържащ три наклонена черта характер.
Тази модификация се нарича "изчислената директива #include". Всяка директива "#include", не отговаря на някое от измененията, описани по-горе са изчислени директива. Всичко друго линия се проверява за подходящия макрос, който след това замества стойността на неговото име. Получената низ трябва да има точно същата като един от най-горе изменения (т.е. името на файла трябва да бъде включен, затворени в кавички или ъглови скоби).
Тази функция ви позволява да дефинирате макроси, което го прави възможно да се промени имената на включени файлове. Тази функция, например, се използва за прехвърляне на програми от една операционна система към друга, което изисква различни заглавни файлове.
Директивата "#include" показва, C предпроцесорни да обработва даден файл преди обработка на остатъка от текущия файл. Информация, издаден от Препроцесорът, вече съдържа данните, следвани от данни, получени при обработката на включвания файл, и за които, от своя страна, следвана от данните, получени при обработката на текста, след директивите "#include". Например, като се има предвид следната приставка "header.h" файл:
и основната програма с името "program.c", като се използва този файл.
Данните, получени при обработката на програма "program.c" ще бъде както следва:
Запушалката може да съдържа файл началото или края sisntaksicheskoy структура, като функция на определение.
Период след "#include" директива винаги е празен и добавете C Препроцесорът дори ако приставката файл не съдържа прекратяване символ за нов ред.
Това често се случва, че включват файл включва друг файл. Това може да доведе до факта, че отделен файл ще бъдат свързани повече от един път, който може да доведе до грешки, ако файлът определя видовете конструкции и определения тип. Затова трябва да се избягва свързването на множество файлове.
Обикновено това се прави от затворници в цялото съдържание на файла, както е показано по-долу:
макро "FILE_FOO_SEEN" показва, че даден файл е вече на Комисията, както и на един ден. На свързан потребителски макро файлове не трябва да започват с '_' и. Системата включете името на файла не трябва да започва с "__", за да се избегнат конфликти с потребителски програми. Каквато и да е името на файла на макро файл трябва да съдържа името и някои допълнителен текст, за да се избегнат конфликти с други voznknoveniya включват файлове.
GNU C предпроцесорни е изградена по такъв начин, че обработката на включвания файл, той проверява наличието на определени проекти и най-ефективните им процеси. Препроцесор специално отбелязва пълното прикачения файл в състояние "#ifndef". Ако включите файл съдържа директива "#include", посочвайки обработен файл, или макрос в директивата "#ifndef" вече е определен, обработен файл е напълно игнорирани.
Има и специална директива, Препроцесорът че файлът трябва да се включат повече от веднъж. Тази директива се нарича "#pragma веднъж". Той е бил използван в допълнение към "#ifndef" директива и сега тя е отхвърлена и не трябва prmenyaetsya.
В обектно-ориентиран език C има промяна "#include" директива, наречена "#import", който се използва за vkyucheniya подаде повече от веднъж. При използване на директива "#import" вместо "# включват" не изисква конвенционален скорост за предотвратяване на обработка на няколко файла.
"Наследствено" е това, което се случва, когато даден файл или обект или формира част от съдържанието му чрез виртуална копиране от друг обект или файл. Ако е свързано с наследството на файловете, означава, че един файл включва друг файл, след което заменя, или добавя нищо.
Ако приставката на файлове и е наследник на главния заглавния файл имат различни имена, като наследство се нарича директен. Той използва дизайн "#include" BASE "" в извлечен файл.
Понякога е необходимо да са наследили и главната заглавния файл имаше същото име.
Например, да предположим, че приложението използва системата включват файл "Сис / signal.h", но версията на "/usr/include/sys/signal.h" файла на тази система изпълнява това, което се изисква в заявлението. Тя ще бъде по-удобно да се определи местната версия, по възможност с името "/usr/local/include/sys/signal.h" да се замени или да добавите към версията доставя със системата.
Това може да стане с помощта на "-I." Вариант при съставянето и създаване на файла, "Сис / signal.h", който изпълнява функциите, необходими на програмата. Но за да направи този файл включва стандартния файл "Сис / signal.h" не е толкова лесно. Когато "#include на линия
Ако използвате директива #include ` "Желания файл е намерен, но този метод не е ЕФЕКТИВНОСТ тъй като тя съдържа пълния път до файловата система. Това може да повлияе на съдържанието на системата, защото това означава, че всички промени в местоположението на системните файлове са необходими допълнителни промени на друго място.
По-ефикасно решение на този проблем е прилагането на "#include_next" директива, която се използва за свързване на файл със същото име. Тази директива също така функционира като "#include" директива, освен търсене на желания файл. Тя започва да търси за списък с включени файлове директории след директорията, където е установено, текущия файл.
Да предположим, че опцията "-I / ЮЕсАр / местни / включва" е определен, както и списък на директории, за да търсят включва "/ ЮЕсАр / включва". Да приемем също, че и двете директории съдържат файл с име "Сис / signal.h". "#include директивата