繁体   English   中英

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

[英]Include one header file in each source file

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

现在我的问题是,有没有一种方法可以为所有文件包含一个标题,而无需在每个文件中放置 #include "header.h",因为将 #include "header.h" 写入 100 个源文件。

您可以将-include标志用于 clang 或 GCC。 手册页

-包含文件

处理文件就像"#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标志

您可以使用 unix 管道解决此问题

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

你不能那样做,虽然你可以写一个脚本来做这件事。 获取每个文件并在顶部写入#include "header.h"脚本。 编辑: -include in gcc 执行此操作。

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

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

gcc -DDEBUG_LEVEL=2

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

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

您尽可能少放入 - 节省编译器工作以及相互依赖关系。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM