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

Should _GNU_SOURCE be defined throughout the project?

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

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

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

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


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

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

毕竟,重点是有些代码如果被定义就会中断,但它仍然需要与使用它的代码链接。

正如@IanAbbott 在下面指出的那样,当您在界面中使用某些不同类型时会出现例外情况。然后,您需要使使用它的模块的定义保持一致。例如。 off_t_GNU_SOURCE 下成为 off64_t 的别名,因此如果您随后包含相同的 header 并关闭 _GNU_SOURCE,它将定义不同的函数。

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