签名:GCC 中的 NESS 优化"bug"
signed:ness optimization "bug" in gcc
我的代码有一个警告,我不知道如何避免它。这是一个代码片段
#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
是否可以避免警告?没有修改 CFLAG 的选项。
我的编译器是 gcc 版本 4.3.4 [gcc-4_3-branch 修订版 152973] (SUSE Linux)
这似乎是glibc中的一个错误。 请参阅此错误报告。
为了提高效率,htons
和亲戚经常被宏重载。尝试类似的东西
uint16_t n_portnbr = (htons)(portnbr);
若要查看这是否解决了您的问题,此语法确保触发函数而不是宏。
如果是这种情况,那真的很可惜他们弄错了。然后,您应该尝试仅为该版本关闭该宏。
可能只是一个缺失的原型,这就是警告听起来的样子。
尝试手动声明htons()
函数,看看是否有帮助。如果是这样,则需要调查标头。
htons()
的 Linux 手册页声称:
POSIX.1-2001.
有些系统需要包含而不是。
更新:正如评论中指出的那样,这是C++,因此它不应该"遭受"函数的隐式声明。奇怪。我建议阅读预处理的代码,也许htons()
是一个由于某种原因行为奇怪的宏。
相关文章:
- 空基优化子对象的地址
- 关闭||运算符优化
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- Clang bug?使用指针作为模板参数
- 返回值优化:显式移动还是隐式
- 人脸跟踪arduino代码的优化
- 使用仅使用一次的变量调用的复制构造函数.这可能是通过调用move构造函数进行编译器优化的情况吗
- 纯函数,为什么没有优化
- 为什么大多数 pair 实现默认不使用压缩(空基优化)?
- 如何以优化的方式同时迭代两个间距不相等的数组
- 小字符串优化(调试与发布模式)
- 强枚举类型定义:Clang Bug 还是 C++11 标准不确定性?
- 浮点定向舍入和优化
- Visual Studio 调试优化如何工作?
- 为什么开关的优化方式与 c/c++ 中的链接不同?
- 线性优化目标函数中的绝对值
- 签名:GCC 中的 NESS 优化"bug"
- 这是g++和clang++优化的bug吗?
- g++优化小写到大写- bug
- 优化编译器消除bug