Jas*_*enX 12 c++ include c-preprocessor
是#include <file>
仅用于标题还是仅仅是机械"在此处注入此代码",可以在代码中的任何位置使用?
如果我在cpp函数中使用它来从单个源"注入"代码怎么办?这会有用吗还是编译器会为此尖叫?
Ale*_*ler 19
这是一个机械注入代码的设备.如果您愿意,可以包含一个包含Goethe's Faust的文本文件.你可以把它放在任何地方,即使是在一个功能的中间(当然,#include
需要一个新的线!).
但是,仅使用#include
头文件是强烈的惯例.我可能有理由不反对它,例如拉入机器生成的代码或将所有翻译单元合并到一个文件中.
Mar*_*som 10
它不仅适用于任何地方,而且可以带来一些有趣的技术.这是一个生成枚举和保证同步的相应字符串表的示例.
Animals.h:
ANIMAL(Anteater)
ANIMAL(Baboon)
...
ANIMAL(Zebra)
Run Code Online (Sandbox Code Playgroud)
AnimalLibrary.h:
#define ANIMAL(name) name,
enum Animals {
#include "Animals.h"
AnimalCount
};
#undef ANIMAL
extern char * AnimalTable[AnimalCount];
Run Code Online (Sandbox Code Playgroud)
AnimalLibrary.cpp:
#include "AnimalLibrary.h"
#define ANIMAL(name) #name,
char * AnimalTable[AnimalCount] = {
#include "Animals.h"
};
Run Code Online (Sandbox Code Playgroud)
main.cpp中:
#include "AnimalLibrary.h"
int main()
{
cout << AnimalTable[Baboon];
return 0;
}
Run Code Online (Sandbox Code Playgroud)
一定不要将通常的包含警卫放在任何将被包含多次的文件中!
必须同意William Pursell,尽管这种技术会让人摸不着头脑.
它将起作用 - 或多或少它的语义含义是:在此文件中放置代码
编辑:对于滥用#include的用法我可以推荐以下内容:
#include "/dev/console"
Run Code Online (Sandbox Code Playgroud)
这允许一切:一行可以做任何事情,一个错误,它只是一个编译问题...