如果我打算使用仅在声明_GNU_SOURCE
后提供的内容,我 需要 在顶部声明_GNU_SOURCE
项目中的 所有 源文件?
安全 仅将其声明在需要它的任何源文件的顶部吗?
我最初的担忧与类型声明有关...当然struct
在定义_GNU_SOURCE
之后可能会发生变化,但这是可能的,或者是否可以保证这样的事情“不会改变形状“?
例如,如果我使用struct
在一个文件中声明变量(使用_GNU_SOURCE
),然后在另一个文件中使用该变量(不使用_GNU_SOURCE
),则保证我不会遇到问题吗?
在这种情况下,我在pthread_tryjoin_np()
之后。
答案 0 :(得分:4)
只在需要它的文件中声明它是安全的。
毕竟,重点是如果定义了某些代码会破坏,但仍然需要与使用它的代码链接。
正如下面的@IanAbbott所述,例外情况是您在界面中使用某些不同的类型。然后,您需要为使用它的模块保持定义一致。例如。在off_t
下,_GNU_SOURCE
变为off64_t
的别名,因此,如果您在_GNU_SOURCE
关闭时包含相同的标题,则会定义不同的函数。
也就是说,在一个项目中,没有太多理由不在任何地方定义它,因为一旦你在任何文件中定义它,你就依赖它。因此,如果它位于可选组件中,或者如果您为其他使用特定于其他系统的功能的系统进行替换,那么在本地定义它只会有所帮助。