Как #include директива - компютърни науки, програмиране

3.3. Как работи директива "#include"

"#include" директива определя C предпроцесорни лекува каза

файл, преди обработка на остатъка от текущия файл. Информацията е предоставена от

предпроцесорни, вече съдържа данните, следвани от данни,

в резултат на обработката на включвания файл, и за които, от своя страна,

последвано от данните, получени при обработката на текста, след директивите

"#include". Например, като се има предвид следната приставка "header.h" файл:

и основната програма с името "program.c", като се използва този файл.

Данните, получени при обработката на "program.c" на програмата ще изглеждат

макро. Всяка програма, фрагмент С могат да бъдат включени в други

файл. Включената файл дори може да съдържа началото на изразяване,

завършваща на файла източник или в края на израза, в началото на който

Той се намира в изходния файл. Въпреки коментарите и низови константи не могат

За да се свържете файл и да продължи в изходния файл. не е завършен

да доведе до възникване на грешка в края на файла.

Приставка файл може да съдържа начална или крайна sisntaksicheskoy

структура, като функция на определение.

Период след "#include" директива винаги е празен и

се добавя към Препроцесорът С, дори ако приставка файл не съдържа

прекратяване символ за нов ред.

3.4. Веднъж включен файлове

Това често се случва, че включват файл включва друг файл. това

Това може да доведе до факта, че отделен файл ще бъде свързан многократно,

което може да доведе до грешки, ако файлът определя видовете

структури и определения тип. Следователно, трябва да се избегне многократно

Това обикновено се извършва чрез сключване на състоянието на цялото съдържание

този файл, както е показано по-долу:

макро "FILE_FOO_SEEN" показва, че даден файл е вече на Комисията, както и на един ден.

Свързаният потребителски файлове макроса не трябва да се започне с

"_". Системата включва файлове име не трябва да започва с

"__", за да се избегнат конфликти с потребителски програми. как

Без значение името на файла на макроса, трябва да съдържа името на файла, както и някои

допълнителен текст, за да се избегнат конфликти с други voznknoveniya

GNU C предпроцесорни е изградена по такъв начин, че обработката приставка

файл, той проверява за някои проекти и най-рационалното

Той ги обработва. Препроцесор специално отбелязва пълното прикачения файл в

"#ifndef" състояние. Ако директива "#include" се съдържа в преписката включва,

посочване на обработен файл, или макрос в директивата "#ifndef" има

дефинирани, за обработен файл е напълно игнорирани.

Има и специална директива, Препроцесорът че

файла трябва да се включат повече от веднъж. Тази директива се нарича

"#pragma веднъж". Той е бил използван в допълнение към директивата "#ifndef" и

сега тя е отхвърлена и не трябва да prmenyaetsya.

В обектно-ориентиран език C има изменение на Директива

"#include", наречен "#import", която се използва за файл vkyucheniya

не повече от веднъж. При използване на "#import" вместо директивата

"#include" не изисква конвенционален скорост за предотвратяване

обработка на няколко файла.

3.5. Включване на файлове, както и наследството

"Наследствено" е това, което се случва, когато някой предмет или

файл образува част от съдържанието му чрез виртуална

копиране от друг обект или файл. Когато сте свързани с преписката

наследство означава, че един файл включва друг файл, а след това замества

или да добавите нещо.

Ако наследява включват файл и включват файл са основните

различни имена, то се нарича директен наследство. В този случай,

употребяван строителство "#include" BASE "" в извлечен файл.

Понякога е необходимо да са наследили и главната заглавния файл

Ние имаме едно и също име.

Например, да предположим, че приложението използва системата

включват файл "Сис / signal.h", но версията на "/usr/include/sys/signal.h" на файла

по тази система изпълнява това, което се изисква в заявлението.

Тя ще бъде по-удобно да се определи местната версия, по възможност с името на

"/usr/local/include/sys/signal.h" да се замени или да добавите към версиите,

снабден със системата.

Това може да стане с помощта на "-I." Вариант съставяне и

създаването на файл "Сис / signal.h", който изпълнява функциите, необходими на програмата.

Но за да направи този файл включва стандартния файл "Сис / signal.h" не

Толкова е просто. Когато "#include на линия "В този файл

ще свързва новата версия на файла, а не на стандартната версия на системата.

Това ще доведе до грешка при съставянето на рекурсия.

Ако използвате директива #include ` "

желания файл е намерен, но този метод не е efektivnost като

Той съдържа пълния път до файловата система. Това може да повлияе на съдържанието на

система, защото това означава, че всяка промяна на местоположението на системата

файлове са необходими допълнителни промени на друго място.

По-ефективно решение на този проблем е използването на директиви

"#include_next", който се използва за свързване на следния файл

със същото име. Тази директива също така функционира като директива "#include"

освен търсене на желания файл. Тя започва да търси списъка директория

заглавните файлове след директорията, където е установено, текущия файл.

Да предположим, че е бил посочен опция "-I / ЮЕсАр / местни / включва", както и списъка на

директории, за да търсите включва "/ ЮЕсАр / включва". Да приемем също, че и двете

директория съдържа файл с име "Сис / signal.h". директива

"#include "Намерете желания файл под директорията

"/ ЮЕсАр / местни / включва". Ако файлът съдържа низ

"#include_next "След това търсенето ще бъде възобновено след предишното

указател и файлът ще бъде намерен в "/ ЮЕсАр / включва" директория.