我需要匹配调用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。(请注意,两台主机上的手册页都说它应该是一个 int。)
extern int getnameinfo ( /*cut*/, unsigned int __flags);
对比
extern int getnameinfo ( /*cut*/, int __flags);
一些搜索让我相信标准已经改变了 flags 参数的类型。
看起来我需要更改函数中的标志类型以匹配主机的定义。处理这个问题的最佳方法是什么?这是一个自动配置类型的问题还是有一些更简单的解决方案?我希望编译器(gcc)有一些我可以利用的宏,但我找不到任何东西。