#include <file>
是仅用于标题还是只是机械“在此注入此代码”,可以在代码中的任何位置使用?
如果我在cpp函数中使用它来从单个源“注入”代码怎么办?这会有用吗还是编制者会为此尖叫?
答案 0 :(得分:19)
是机械在这里注入代码设备。如果您愿意,可以包含一个包含Goethe's Faust的文本文件。你可以把它放在任何地方,即使是在一个函数的中间(当然,#include
需要一个新线!)。
但是,仅对头文件使用#include
是一种强烈的惯例。我可能有理由不反对它,例如拉入机器生成的代码或将所有翻译单元合并到一个文件中。
答案 1 :(得分:10)
它不仅可以在任何地方使用,而且可以带来一些有趣的技巧。这是一个生成枚举和保证同步的相应字符串表的示例。
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;
}
请确保不要将常用的包含警卫放在任何多次包含的文件中!
同意William Pursell虽然这种技术会让人摸不着头脑。
答案 2 :(得分:7)
它会起作用 - 或多或少它的语义是:在这里放置代码
编辑:对于滥用#include的用法,我可以推荐以下内容:
#include "/dev/console"
这允许一切:一行可以做任何事情,一个错误,它只是编译问题...
答案 3 :(得分:5)
编译器不会抱怨,但每个必须维护代码的人都会。
答案 4 :(得分:1)
应该可以工作,它由预处理器处理,你的编译器甚至都看不到它。
答案 5 :(得分:0)
#include和其他预处理程序指令(如#define或#import)可以出现在源代码中的任何位置,但仅适用于包含该代码后的代码。它旨在将引用的代码包含在调用它的源文件中。 这个MSDN页面很好地解释了它。 http://msdn.microsoft.com/en-us/library/36k2cdd4(v=VS.71).aspx
答案 6 :(得分:0)
include由预处理器处理,是一种注入代码的机制。对于包含的文件或将#include放在代码中的位置没有任何限制(认为它应该在自己的行中)。只要预处理器可以找到指定的文件,它就会将其内容导入当前文件。
传统上,您对头文件执行此操作。我已经看到在模板实例化期间使用cpp文件(使用正确的#ifdef,因此您不会多次包含它导致多个符号定义错误)。
如果你有一个长常量,你也可以为其他文件类型执行此操作。 (虽然有更好的方法来处理长字符串常量)