1

来自 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 真的提供这两个功能吗?如果是这样,链接器如何区分它们。在链接方面,所有预处理器定义都消失了,那么这里发生了什么?

4

1 回答 1

2

Take a look in <string.h>. When using the XSI-compliant version, it redefines strerror_r using a macro:

#   define strerror_r __xpg_strerror_r

There's no confusion in the linker, because xpg_strerror_r is a different function.

于 2013-08-22T08:29:59.063 回答