【问题标题】:Different versions of function with the same name不同版本的同名函数
【发布时间】:2013-08-24 20:50:18
【问题描述】:

来自 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.13 起可用) glibc 2.0)。 XSI 兼容版本提供了概要中显示的功能测试宏设置;否则提供 GNU 特定版本。

glibc 真的提供这两个功能吗?如果是这样,链接器如何区分它们。在链接方面,所有预处理器定义都消失了,这是怎么回事?

【问题讨论】:

    标签: posix gnu glibc


    【解决方案1】:

    看看<string.h>。使用 XSI 兼容版本时,它使用宏重新定义 strerror_r

    #   define strerror_r __xpg_strerror_r
    

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

    【讨论】:

      猜你喜欢
      • 2015-06-18
      • 1970-01-01
      • 1970-01-01
      • 2020-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多