我需要匹配调用getnameinfo的签名,所以我可以围绕这个调用写封装。 不幸的是主机之间的签名改变。
事情正在发挥作用,直到我试图在最新的CentOS 6.3上编译,这给出了错误:
error: conflicting types for 'getnameinfo'
咦?
事实certificate,最后一个参数flags在CentOS(glibc-headers-2.12-1.80)上被列为一个无符号整数,但是在Fedora上只是一个int(glibc-headers-2.15-58)。 (请注意,这两个主机上的手册页说它应该是一个int)。
extern int getnameinfo ( /*cut*/, unsigned int __flags);
VS
extern int getnameinfo ( /*cut*/, int __flags);
有些search引导我相信标准已经改变了标志参数的types 。
它看起来像我需要改变我的函数中的标志types,以配合主机的定义。 处理这个问题的最好方法是什么? 这是一个autoconftypes的问题,还是有一些更简单的解决scheme? 我希望编译器(gcc)有一些我可以利用的macros,但是我找不到任何东西。
您可以检查__GLIBC_MINOR__
定义的__GLIBC_MINOR__
宏,并相应地传递参数,例如:
#include <features.h> #if __GLIBC_MINOR__ > 12 getnameinfo(..., flags); #else getnameinfo(..., (unsigned) flags); #endif