gpt4 book ai didi

c - header 的宏定义,放在哪里?

转载 作者:太空狗 更新时间:2023-10-29 16:38:50 25 4
gpt4 key购买 nike

定义 header 所依赖的宏时,例如 _FILE_OFFSET_BITSFUSE_USE_VERSION_GNU_SOURCE 等,其中放置它们的最佳位置?

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

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

注意:根据 make、autotools 和其他构建系统的适用性进行论证是我做出决定的一个因素。

最佳答案

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

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

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

关于c - header 的宏定义,放在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3384741/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com