1
3
如果宏影响系统头,它们可能应该影响包含这些系统头的每个源文件(包括间接包含它们的源文件)。因此,最合乎逻辑的位置应该在命令行上,假设您的构建系统允许您设置CPPFLAGS来影响每个文件的编译。
对于影响自包含库(无论是第三方的还是由您编写的)的宏,我将创建一个包装头来定义宏,然后包含库头。然后,项目中对库的所有使用都应该包含包装器头,而不是直接包含库头。这避免了不必要地定义宏,并清楚地表明它们与该库相关。如果库之间存在依赖关系,那么为了安全起见,可能需要将宏设置为全局的(在生成系统或预编译头中)。 |
2
3
那要看情况了。 大多数情况下,我会通过命令行定义-在Makefile或任何您使用的构建系统中。
至于
|
3
1
我总是通过
|
4
1
我见过的大多数使用它们的项目都是通过
最好对整个程序都这样做,因为有些标志会影响函数的哪个版本或结构的大小/布局,如果不小心,把它们混在一起可能会导致疯狂的事情。
|
5
1
为了
为了
然后将定义传递到命令行或放置在
|
6
0
相关信息 应该
这比:
因为你不必去寻找
举个例子,如果您需要用不同的值多次编译单个源文件,那么 有
但是,如果该文件的每个编译都将使用7,则可以将其移到使用它的位置:
请注意,我已经做了两次,所以它更本地化。这不是一个问题,因为如果您只更改一个,编译器会告诉您,但它确保您知道这些定义是为特定的头设置的。
如果你确定你会
包括(例如)
|
7
0
全局的、项目范围的、特定于目标的常量最好放在makefile的CCFLAGS中。到处使用的常量可以放在适当的头文件中,这些头文件包含在任何使用它们的文件中。
然后,在另一个标题中,
|
8
0
我推荐使用头文件,因为它允许您使用make文件和其他构建系统以及IDE项目(如visualstudio)构建代码库。这给了你一个单一的定义,可以伴随着评论(我是一个球迷的 doxygen 它允许你生成 macro documentation 头文件的另一个好处是,您可以轻松地编写单元测试,以验证是否只定义了宏的有效组合。 |
user1202136 · HAVE_*宏的目的是什么? 7 年前 |
Danny Lo · 嵌套文件夹的自动生成-递归是必须的吗? 9 年前 |
rich p · 链接器从哪里获得库名称? 9 年前 |
Razican · 如何在程序的自动检查中设置常量? 9 年前 |
Ender · 如何使用自动工具构建特定组件? 9 年前 |