是否应该在整个项目中定义 _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
,它将定义不同的函数。
也就是说,在一个项目中,确实没有太多理由不到处定义它,因为一旦你在任何文件中定义它,你就会依赖它。因此,如果它在可选组件中,或者如果您有其他系统的替代品,而这些系统使用特定于其他系统的功能,那么在本地定义它只会有帮助。
如果我打算使用仅在声明 _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
,它将定义不同的函数。
也就是说,在一个项目中,确实没有太多理由不到处定义它,因为一旦你在任何文件中定义它,你就会依赖它。因此,如果它在可选组件中,或者如果您有其他系统的替代品,而这些系统使用特定于其他系统的功能,那么在本地定义它只会有帮助。