#include везде
Используется ли #include <file>
для заголовков или это просто механический "вводят этот код здесь", который можно использовать где угодно в коде?
Что делать, если я использую его в середине функции cpp, чтобы просто "ввести" код из одного источника? будет ли эта работа или компиляторы кричат об этом?
Ответы
Ответ 1
Это механический ввод кода здесь. Вы можете включить текстовый файл, содержащий Goethe Faust, если хотите. Вы можете поместить его куда угодно, даже в середине функции (конечно, #include
нужна новая строка!).
Однако это сильное соглашение использовать только #include
для файлов заголовков. Могут быть причины, по которым я бы не стал возражать против этого, например, потянув машинный код или сменив все единицы перевода в одном файле.
Ответ 2
Он работает не только в любом месте, но может привести к некоторым интересным приемам. Здесь приведен пример, который генерирует перечисление и соответствующую таблицу строк, которые гарантированно синхронизируются.
Animals.h:
ANIMAL(Anteater)
ANIMAL(Baboon)
...
ANIMAL(Zebra)
AnimalLibrary.h:
#define ANIMAL(name) name,
enum Animals {
#include "Animals.h"
AnimalCount
};
#undef ANIMAL
extern char * AnimalTable[AnimalCount];
AnimalLibrary.cpp:
#include "AnimalLibrary.h"
#define ANIMAL(name) #name,
char * AnimalTable[AnimalCount] = {
#include "Animals.h"
};
main.cpp:
#include "AnimalLibrary.h"
int main()
{
cout << AnimalTable[Baboon];
return 0;
}
Не забудьте включить обычные защитные устройства в любой файл, который будет включаться несколько раз!
Обязательно соглашайтесь с Уильямом Пурселем, хотя эта техника заставит людей почесывать головы.
Ответ 3
Он будет работать - более или менее его семантическое значение: код места в этом файле здесь
РЕДАКТИРОВАТЬ: для злоупотребления использования #include я могу просто рекомендовать следующее:
#include "/dev/console"
Это позволяет все: однострочный, который может делать все, ошибка, это просто вопрос компиляции...
Ответ 4
Составители не будут жаловаться, но всем, кто должен поддерживать код, будет.
Ответ 5
Должен работать, он обрабатывается вашим препроцессором, ваш компилятор даже не увидит его.
Ответ 6
#include и другие директивы препроцессора, такие как #define или #import, могут появляться в любом месте источника, но будут применяться только к коду после этого включения. Он предназначен для включения ссылочного кода в исходный файл, который его вызывает.
Эта страница MSDN объясняет это довольно хорошо. http://msdn.microsoft.com/en-us/library/36k2cdd4(v=VS.71).aspx
Ответ 7
include обрабатывается препроцессором и является механизмом для ввода кода. Нет ограничений на файл, который включен или где этот #include помещается в ваш код (подумал, что он должен быть в собственной строке). Пока указанный файл может быть найден препроцессором, он будет импортировать его содержимое в текущий файл.
Обычно вы делаете это для файлов заголовков. Я видел, как это делается с файлами cpp во время создания шаблона (с правильным #ifdef, поэтому вы не включаете его несколько раз, вызывая множественную ошибку определения символа).
Если у вас длинная константа, вы можете сделать это и для других типов файлов. (Хотя есть более эффективные способы обработки длинных строковых констант)