在每个源文件中包含一个头文件

假设您有100个源文件(.c或.cpp)文件,并且您希望在每个文件中包含一些定义,函数/变量声明。 通常在C / C ++中,您使用头文件来实现此目的。 但在这种情况下,您需要在每个源文件中放入#include“header.h”。

现在我的问题是,有没有办法为所有文件包含一个标题而不在每个文件中放入#include“header.h”,因为编写#include“header.h”为100s是非常烦人的源文件。

您可以对clang或GCC使用-include标志。 从手册页 :

包含文件

处理文件好像"#include "file""出现在主源文件的第一行。 但是,搜索文件的第一个目录是预处理器的工作目录, 而不是包含主源文件的目录。 如果在那里找不到,则在"#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标志 ,类似。

是的,这会很烦人。 这就是你使用shell的原因 ……

下面的神秘咒语将完全按照你的要求进行几次击键!

 find ./ -name "*.c" -or -name "*.cpp" | xargs -n 1 sed -i '1 i #include ' 

屈服于unix的强大力量,异教徒……

虽然您可以编写脚本来执行此操作,但您不能这样做。 一个脚本,它接收每个文件,并在顶部写入#include "header.h" 编辑: -include在gcc中执行此操作。

但是,您需要的是通过编译器选项以不同的方式实现的。 在gcc中,使用-D

假设您希望在所有源文件DEBUG_LEVEL定义为2。 你可以通过调用这样的gcc来做到这一点:

 gcc -DDEBUG_LEVEL=2 

请注意,在这种情况下,您需要重建所有项目(如果您已将所有源文件所依赖的1个头文件中的此定义更改,则无论如何都会这样做)

头文件不是定义 – 它们是声明。

您尽可能少地使用 – 保存编译器工作以及相互依赖性。

您甚至可以通过在这些头文件中使用前向声明来进一步减少数量。

如果你很聪明,你可以通过IDE来帮助你填补空白而不是伤到你的手指。