#include 任何地方
#include anywhere
#include <file>
是仅用于标头,还是只是可以在代码中的任何位置使用的机械"在此处注入此代码"?
如果我在 cpp 函数的中间使用它来"注入"来自单个来源的代码怎么办? 这会起作用还是编译器会为此尖叫?
它是一个机械注入代码的设备。如果您愿意,可以包含一个包含歌德《浮士德》的文本文件。你可以把它放在任何地方,即使是在函数的中间(当然,#include
需要一行新行!
但是,仅对头文件使用 #include
是强约定。可能有一些原因我不会反对它,例如拉入机器生成的代码或将所有翻译单元合并到一个文件中。
它不仅在任何地方都有效,而且可以带来一些有趣的技术。下面是一个示例,用于生成保证同步的枚举和相应的字符串表。
动物.h:
ANIMAL(Anteater)
ANIMAL(Baboon)
...
ANIMAL(Zebra)
动物图书馆.h:
#define ANIMAL(name) name,
enum Animals {
#include "Animals.h"
AnimalCount
};
#undef ANIMAL
extern char * AnimalTable[AnimalCount];
动物图书馆.cpp:
#include "AnimalLibrary.h"
#define ANIMAL(name) #name,
char * AnimalTable[AnimalCount] = {
#include "Animals.h"
};
主.cpp:
#include "AnimalLibrary.h"
int main()
{
cout << AnimalTable[Baboon];
return 0;
}
确保不要将通常的包含保护放在任何将包含多次的文件中!
必须同意威廉·珀塞尔的观点,尽管这种技术会让人们挠头。
编译器不会抱怨,但每个必须维护代码的人都会抱怨。
它会工作 - 或多或少它的语义含义是: 将代码放在该文件中
编辑:对于滥用 #include 的用法,我可以推荐以下内容:
#include "/dev/console"
这允许一切:可以做任何事情的单行,一个错误,它只是一个编译问题......
可以工作,它由你的预处理器处理,你的编译器甚至看不到它。
#include 和其他预处理器指令(如 #define 或 #import)可以出现在源代码中的任何位置,但仅适用于包含后的代码。它旨在将引用的代码包含在调用它的源文件中。这个MSDN页面很好地解释了它。http://msdn.microsoft.com/en-us/library/36k2cdd4(v=VS.71).aspx
include 由预处理器处理,是一种注入代码的机制。对于要包含的文件或此 #include 在代码中的位置没有限制(认为它应该在自己的行中)。只要预处理器可以找到指定的文件,它就会将其内容导入到当前文件中。
通常,对头文件执行此操作。我已经看到在模板实例化期间使用 cpp 文件完成此操作(使用适当的 #ifdef,因此您不会多次包含它,从而导致多符号定义错误)。
如果你有一个长常量,你也可以对其他文件类型执行此操作。(尽管有更好的方法来处理长字符串常量)
- 从包含m行的文件中提取n行,必要时(惰性地)重复该文件
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- Eigen如何在容器循环中干净地附加矩阵
- 既然存在危险,为什么项目要使用-I include开关
- 有充分的理由在h文件中使用include保护而不是cpp文件吗
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- VS Code认为任何文件的第一行都是#include错误
- 没有任何 #include "using namespace std;"?
- 一个创建彩票游戏的程序,该彩票游戏可以有效地创建 10 套而没有任何重复?
- 重构许多函数以优雅地接收任何类型的参数(模板<any>)
- 任何更快地生成元素并检查它们是否为素数的方法
- C++:如果我包含多个头文件,如果两个都有 #include,是否会导致任何问题<string>?
- 任何精确地制作以下 c++ 代码的建议
- 如何在最大限度地提高大小有效性的同时,将3态的位运算符实现为任何大小的内存
- 如何有效地渲染双缓冲窗口而不产生任何撕裂效果
- 不要同时 #include<GL/glcorearb.h>和<GL/gl.h>或<GL/glext.h中的任何一个>
- 模板类成员?如何适当地实现此行为,因为没有任何行为?
- 对于c++中大量的私有类常量声明,任何不从另一个文件#include的理由
- c 预处理器 - C++ #include查找是否有任何标准要求
- #include 任何地方