我需要匹配调用 getnameinfo 的签名所以我可以围绕那个调用写一个包装器。不幸的是,主机之间的签名会发生变化。
在我尝试在最新的 CentOS 6.3 上进行编译之前,事情一直在进行中,但出现了错误:
error: conflicting types for 'getnameinfo'
嗯?
事实证明,最后一个参数 flags 在 CentOS (glibc-headers-2.12-1.80) 上被列为一个 unsigned int,但在 Fedora (glibc-headers-2.15-58) 上只是一个 int。 (请注意,两个主机上的手册页都说它应该是一个整数。)
extern int getnameinfo ( /*cut*/, unsigned int __flags);
对比
extern int getnameinfo ( /*cut*/, int __flags);
一些搜索让我相信the standard has changed the type标志参数。
看来我需要更改函数中的标志类型以匹配主机的定义。 处理这个问题的最佳方法是什么?这是一个 autoconf 类型的问题还是有一些更简单的解决方案?我希望编译器 (gcc) 有一些我可以利用的宏,但我找不到任何东西。
最佳答案
您可以检查 features.h
中定义的 __GLIBC_MINOR__
宏并相应地传递参数,例如:
#include <features.h>
#if __GLIBC_MINOR__ > 12
getnameinfo(..., flags);
#else
getnameinfo(..., (unsigned) flags);
#endif
关于c - getnameinfo 的签名在 glibc 版本之间发生变化,我该如何匹配它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14902553/