我需要消除 gcc -Wconversion 警告。例如
typedef unsigned short uint16_t;
uint16_t a = 1;
uint16_t b = 2;
b += a;
gives
warning: conversion to 'uint16_t {aka short unsigned int}' from 'int' may alter its value [-Wconversion]
b += a;
~~^~~~
我可以通过以下方式消除这个问题
uint16_t a = 1;
uint16_t b = 2;
b = static_cast<uint16_t>(b + a);
有什么办法可以保留operator+=
并消除警告?谢谢。
EDIT
I use
gcc test.cpp -Wconversion
我的海湾合作委员会版本是
gcc.exe(Rev3,由 MSYS2 项目构建)7.2.0
我需要消除 gcc -Wconversion 警告。
你没有说为什么,但这实际上不太可能。
From 此交换机上的 GCC wiki 页面:
为什么 -Wall 或至少 -Wextra 不启用 Wconversion?
隐式转换在 C 中非常常见。这与前端中没有数据流(参见下一个问题)这一事实有关,导致很难避免对完美工作和有效代码的警告。Wconversion
专为特定用途(安全审核、将 32 位代码移植到 64 位等)而设计,其中程序员愿意接受并解决无效警告。因此,如果没有明确请求,则不应启用它。
如果您不想要它,只需将其关闭即可。
用不必要的强制转换来破坏代码,使其更难以阅读和维护,是错误的解决方案。
如果您的构建工程师坚持使用此标志,请询问他们why,并要求他们停止。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)