假设你有数百个源文件(.c或.cpp文件),并且您希望在每个源文件中包含一些定义、函数/变量声明。通常在C/C++中,我们使用头文件来实现此目的。但是在这种情况下,您需要在每个源文件中放置#include“header.h”。那么我的问题是,是否有一种方法可以为所有文件包含一个头文件,而不必在每个文件中加入#include “header.h”,因为为数百个源文件编写#include “header.h”将非常繁琐。
-include
标志。从man页面中得知:
-include 文件名
将文件名当作若干源代码文件的第一行,使它们隐式地被包含在每个文件中。然而,寻找文件名的第一个目录是预处理器的工作目录,而不是包含主源代码文件的目录。如果在该目录中没有找到,则按照正常的"#include "...""
搜索链的剩余部分继续查找。clang -include header.h -c file1.c
clang -include header.h -c file2.c
clang -include header.h -c file3.c
clang -o app file1.o file2.o file3.o
MSVC有/FI
标志,它类似于/include
。
find ./ -name "*.c" -or -name "*.cpp" | xargs -n 1 sed -i '1 i #include <my_header.h>'
你不能这样做,但是你可以编写一个脚本来实现。一个脚本可以遍历每个文件,并在顶部写入编辑:#include "header.h"
。-include
在gcc中可以实现此功能。
然而,通过编译器选项,您可以以不同的方式实现所需的功能。在gcc中,使用-D
。
假设您想要在所有源文件中将定义DEBUG_LEVEL
设置为2。您只需像这样调用gcc:
gcc -DDEBUG_LEVEL=2
头文件不是定义,它们只是声明。
尽可能少地放入头文件 - 这样可以节省编译器的工作量,也可以减少相互依赖性。
你甚至可以通过在这些头文件中使用前向声明来进一步减少数量。
如果你聪明的话,你可以让你的 IDE 帮助你填补空缺,而不是伤害你的手指。
<iosfwd>
,这样包含层次结构可以确保一致性和声明组件的所有权,它确保了在类型被替换为特定模板实例化的typedef时重新编译的工作。 - Tony Delroy