Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 是否应在整个项目中定义_GNU__源?_C_Gnu - Fatal编程技术网

C 是否应在整个项目中定义_GNU__源?

C 是否应在整个项目中定义_GNU__源?,c,gnu,C,Gnu,如果我计划使用仅在声明_GNU_SOURCE之后提供的东西,我是否需要在项目中所有源文件的顶部声明_GNU_SOURCE 只在需要它的源文件顶部声明它安全吗 我最初关心的是类型声明。。。当然,一个结构在定义了_GNU_SOURCE之后改变形状是可能的,但这是可能的,还是可以保证这些东西不会改变形状 例如,如果我使用一个结构在一个文件中声明一个带有_GNU_SOURCE的变量,然后在另一个没有_GNU_SOURCE的文件中使用该变量,是否可以保证我不会遇到问题 在本例中,我在寻找pthread\u

如果我计划使用仅在声明_GNU_SOURCE之后提供的东西,我是否需要在项目中所有源文件的顶部声明_GNU_SOURCE

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

我最初关心的是类型声明。。。当然,一个结构在定义了_GNU_SOURCE之后改变形状是可能的,但这是可能的,还是可以保证这些东西不会改变形状

例如,如果我使用一个结构在一个文件中声明一个带有_GNU_SOURCE的变量,然后在另一个没有_GNU_SOURCE的文件中使用该变量,是否可以保证我不会遇到问题


在本例中,我在寻找pthread\u tryjoin\u np。

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

毕竟,问题的关键在于,如果定义了,某些代码可能会中断,但它仍然需要与使用它的代码链接

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


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

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

毕竟,问题的关键在于,如果定义了,某些代码可能会中断,但它仍然需要与使用它的代码链接

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

也就是说,在一个项目中,没有太多理由不在任何地方定义它,因为一旦在任何文件中定义了它,您就依赖它了。因此,仅当它位于可选组件中,或者如果您有其他系统的替代品,而这些替代品使用特定于这些其他系统的功能时,在本地定义它才有帮助。

这取决于具体情况。定义_GNU____ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _。这可能是问题,也可能不是问题,这取决于使用它们的代码,以及目标是否在没有明确请求的情况下具有本机大文件支持。定义_GNU____ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _。这可能是问题,也可能不是问题,具体取决于使用它们的代码,以及目标是否具有本机大文件支持,而无需明确请求。如果您的编译器是gcc,则可以使用选项:-std=gnu11,那么编译器将像编写了glibc的每个功能测试宏一样工作,包括_GNU_源宏。如果您的编译器是gcc,那么您可以使用选项:-std=gnu11,那么编译器将像编写glibc的每个特性测试宏一样工作,包括_GNU_SOURCE宏。那么你就不必担心你问题中提到的这些细节了。