是否应在整个项目中定义_GNU_SOURCE?

时间:2017-05-26 10:30:00

标签: c gnu

如果我打算使用仅在声明_GNU_SOURCE后提供的内容,我 需要 在顶部声明_GNU_SOURCE项目中的 所有 源文件?

安全 仅将其声明在需要它的任何源文件的顶部吗?

我最初的担忧与类型声明有关...当然struct在定义_GNU_SOURCE之后可能会发生变化,但这是可能的,或者是否可以保证这样的事情“不会改变形状“?

例如,如果我使用struct在一个文件中声明变量(使用_GNU_SOURCE),然后在另一个文件中使用该变量(不使用_GNU_SOURCE),则保证我不会遇到问题吗?

在这种情况下,我在pthread_tryjoin_np()之后。

1 个答案:

答案 0 :(得分:4)

只在需要它的文件中声明它是安全的。

毕竟,重点是如果定义了某些代码会破坏,但仍然需要与使用它的代码链接。

正如下面的@IanAbbott所述,例外情况是您在界面中使用某些不同的类型。然后,您需要为使用它的模块保持定义一致。例如。在off_t下,_GNU_SOURCE变为off64_t的别名,因此,如果您在_GNU_SOURCE关闭时包含相同的标题,则会定义不同的函数。

也就是说,在一个项目中,没有太多理由不在任何地方定义它,因为一旦你在任何文件中定义它,你就依赖它。因此,如果它位于可选组件中,或者如果您为其他使用特定于其他系统的功能的系统进行替换,那么在本地定义它只会有所帮助。