Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 签名:ness optimization“;臭虫“;在gcc中_C++_Linux_Gcc_Compiler Construction_Warnings - Fatal编程技术网

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);