C++ 签名:ness optimization“;臭虫“;在gcc中
我的代码有一个警告,我不知道如何避免它。下面是一段代码片段C++ 签名:ness optimization“;臭虫“;在gcc中,c++,linux,gcc,compiler-construction,warnings,C++,Linux,Gcc,Compiler Construction,Warnings,我的代码有一个警告,我不知道如何避免它。下面是一段代码片段 #include <arpa/inet.h> int main(void) { uint16_t portnbr=0; uint16_t n_portnbr = htons(portnbr); return n_portnbr; } 输出: a.cpp:4: warning: conversion to 'short unsigned int' from 'int' may
#include <arpa/inet.h>
int main(void) {
uint16_t portnbr=0;
uint16_t n_portnbr = htons(portnbr);
return n_portnbr;
}
输出:
a.cpp:4: warning: conversion to 'short unsigned int' from 'int' may alter its value
有可能避免警告吗?没有修改CFLAGS的选项
我的编译器是gcc版本4.3.4[gcc-4_3-branch修订版152973](SUSE Linux)可能只是缺少一个原型,这就是警告听起来的样子 尝试手动声明
htons()
函数,看看是否有帮助。如果是这样,您需要调查您的头
对于htons()
索赔:
POSIX.1-2001
有些系统需要包含而不是
<强> Update <强>:正如注释中所指出的,这是C++,所以它不应该被函数的隐式声明“痛苦”。奇怪。我建议您阅读预处理的代码,也许
htons()
是一个宏,由于某种原因,它的行为异常。为了提高效率,htons
及其亲属经常被宏重载。试试像这样的东西
uint16_t n_portnbr = (htons)(portnbr);
要查看这是否解决了问题,此语法确保触发函数而不是宏
如果是这样的话,很遗憾他们弄错了。然后,您应该尝试关闭该版本的宏。这似乎是glibc中的一个错误。看到这一点。gcc 4.1.2或4.7中我没有收到警告——您不应该收到警告,至少不应该在第4行(声明
n\u portnbr
)htons()。#include
应该为您提供htons()的正确声明。return
语句可能是个问题,但我没有得到任何警告,显然你也没有。你复制和粘贴了你的代码吗?在你的系统上声明了<代码> HONTSH()/Cux>?ExtUn Unt1616t Hton(Unt1616t?),这是我的直接反应,但是至少从事物的外观来看,他编译为C++,不需要原型就不允许调用。这个方法是有效的。消除了我的警告,但我还需要在运行时检查。@cateof,您需要在运行时检查什么?
uint16_t n_portnbr = (htons)(portnbr);