具有相同名称的不同版本的函数

时间:2013-08-22 08:20:05

标签: posix gnu glibc

来自man 3 strerror:

int strerror_r(int errnum, char *buf, size_t buflen);
        /* XSI-compliant */

char *strerror_r(int errnum, char *buf, size_t buflen);
        /* GNU-specific */

...

  

此功能有两个版本:POSIX.1-2001中指定的XSI兼容版本(自glibc 2.3.4起可用,但在glibc 2.13之前不兼容POSIX),以及GNU特定版本(自此以后可用) glibc 2.0)。符合XSI的版本提供了概要中显示的功能测试宏设置;否则提供GNU特定版本。

glibc真的提供这两种功能吗?如果是这样,链接器如何区分它们。当谈到链接时,所有预处理器定义都消失了,所以这里发生了什么?

1 个答案:

答案 0 :(得分:2)

查看<string.h>。使用符合XSI的版本时,它使用宏重新定义strerror_r

#   define strerror_r __xpg_strerror_r

链接器中没有混淆,因为xpg_strerror_r是一个不同的功能。