标题的宏定义,放置它们的位置?

Mat*_*ner 13 c macros header autotools build-system

当定义一个头靠宏,如_FILE_OFFSET_BITS,FUSE_USE_VERSION,_GNU_SOURCE等等,这里是把他们最好的地方?

我考虑过的一些可能性包括

  1. 位于依赖于该文件中包含的标头所公开的定义的任何源文件的顶部
  2. 紧接着包含相关标题之前
  3. CPPFLAGS通过编译器在级别定义?(例如-D_FILE_OFFSET_BITS=64)用于:
    1. 整个源代码回收
    2. 整个项目
    3. 只是需要它的来源
  4. 在项目标题中,还应包括宏应用的那些相关标题
  5. 其他一些我没有想过的地方,但是无限优越

注意:适用于制作,自动工具和其他构建系统的合理性是我决定的一个因素.

Ant*_*ams 3

如果宏影响系统头文件,它们可能应该到达影响包含这些系统头文件(包括那些间接包含它们的文件)的每个源文件的位置。因此,最合乎逻辑的地方是在命令行上,假设您的构建系统允许您设置 CPPFLAGS 等来影响每个文件的编译。

如果您使用预编译头,并且有一个必须首先包含在每个源文件中的预编译头(例如 MSVC 项目的 stdafx.h),那么您也可以将它们放在那里。

对于影响自包含库(无论是第三方库还是您编写的库)的宏,我将创建一个包装器标头来定义宏,然后包含库标头。然后,项目中对库的所有使用都应包含包装器标头,而不是直接包含库标头。这避免了不必要的定义宏,并清楚地表明它们与该库相关。如果库之间存在依赖关系,那么为了安全起见,您可能希望将宏设为全局(在构建系统或预编译头中)。