首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c89和POSIX同时

c89和POSIX同时
EN

Stack Overflow用户
提问于 2014-02-18 23:36:53
回答 2查看 706关注 0票数 2

即使在严格的std=c89中也可以使用POSIX函数吗?当我试图在Linux上以严格的ANSI C模式编译可执行文件时,gcc和clang都不知道像readlinkrealpath这样的函数,尽管其中包括了头。由于我必须使用POSIX函数,即使在ANSI C模式下,我也在寻找方法来实现它。我想过dlsym,但我不知道我要开哪个图书馆。这样的呼叫被#ifdef包围,因此它们不会在另一个系统上发出警报。需要跨平台的解决方案。提前感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-19 00:04:07

你在找“特性测试宏”。请参阅单一Unix规范,第6期:系统接口,第2.2章,“编译环境”

编辑:

引用这一页的话:

_POSIX_C_SOURCE特征测试宏 符合POSIX的应用程序应该确保在包含任何标头之前定义了特性测试宏_POSIX_C_SOURCE。

GCC和clang目前默认为您定义_POSIX_C_SOURCE,除非将c89、c99、c11或任何行为等效字符串传递给编译器的-std选项。

此外:

_XOPEN_SOURCE特征测试宏 符合XSI标准的应用程序应确保在包含任何标头之前使用值600定义特性测试宏_XOPEN_SOURCE。为了启用_POSIX_C_SOURCE特性测试宏中描述的功能,以及启用XSI扩展,需要这样做。

换句话说,以保证您的程序(a.k.a。应用程序)可以使用POSIX,可以在包含任何标头之前使用#define _POSIX_C_SOURCE 200112L,也可以将-D_POSIX_C_SOURCE=200112L选项传递给编译器。对于XSI功能,必须将_XOPEN_SOURCE定义为600。

还有一个更新版本的单一Unix规范-问题7. 类似的文本可在第7期中找到。。与上面的文本相比,唯一真正的区别是_POSIX_C_SOURCE和_XOPEN_SOURCE的数字已经改变了。

票数 3
EN

Stack Overflow用户

发布于 2014-02-18 23:52:00

至少当gcc和glibc在linux上结合使用时,您可以用#define打开非标准函数(例如,由posix定义的函数),请参阅man

例如,在包含任何头文件之前,或者通过将其添加到编译器参数中,#define _POSIX_C_SOURCE 200809L

代码语言:javascript
复制
gcc -std=c99 -D_POSIX_C_SOURCE=200809L ... 
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21867897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档