signed:gcc 中的优化“bug”

问题描述 投票:0回答:3

我的代码有一个警告,我不知道如何避免它。这是一个代码片段

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

c++ linux gcc warnings
3个回答
4
投票

这似乎是 glibc 中的一个错误。 请参阅此错误报告


2
投票

为了提高效率,

htons
和亲戚经常被宏超载。尝试类似的事情

uint16_t n_portnbr = (htons)(portnbr);

要查看这是否可以解决您的问题,此语法确保触发函数而不是宏。

如果真是这样,那真是可惜他们搞错了。然后,您应该尝试仅针对该版本关闭该宏。


1
投票

可能只是缺少原型,这就是警告的含义。

尝试手动声明

htons()
函数,看看是否有帮助。如果是这样,您需要调查您的标头。

Linux 手册页

htons()
声明:

POSIX.1-2001。

某些系统要求包含 而不是

更新:正如评论中所指出的,这是 C++,因此它不应该“遭受”函数隐式声明的影响。奇怪的。我建议阅读预处理代码,也许

htons()
是一个由于某种原因表现得很奇怪的宏。

© www.soinside.com 2019 - 2024. All rights reserved.