我的代码有一个警告,我不知道如何避免它。这是一个代码片段
#include <arpa/inet.h>
int main(void) {
uint16_t portnbr=0;
uint16_t n_portnbr = htons(portnbr);
return n_portnbr;
}
编译器:
/usr/bin/g++ -Wconversion -Wall -O2 a.cpp
输出:
a.cpp:4: warning: conversion to 'short unsigned int' from 'int' may alter its value
是否可以避免警告? 没有修改 CFLAGS 的选项。
我的编译器是 gcc 版本 4.3.4 [gcc-4_3-branch revision 152973] (SUSE Linux)
这似乎是 glibc 中的一个错误。 请参阅此错误报告。
为了提高效率,
htons
和亲戚经常被宏超载。尝试类似的事情
uint16_t n_portnbr = (htons)(portnbr);
要查看这是否可以解决您的问题,此语法确保触发函数而不是宏。
如果真是这样,那真是可惜他们搞错了。然后,您应该尝试仅针对该版本关闭该宏。
可能只是缺少原型,这就是警告的含义。
尝试手动声明
htons()
函数,看看是否有帮助。如果是这样,您需要调查您的标头。
htons()
声明:
POSIX.1-2001。
某些系统要求包含
而不是 。
更新:正如评论中所指出的,这是 C++,因此它不应该“遭受”函数隐式声明的影响。奇怪的。我建议阅读预处理代码,也许
htons()
是一个由于某种原因表现得很奇怪的宏。