Lou*_*Lou 0 c gcc type-conversion gcc-warning
在现有代码库中解决此类警告的正确方法是什么?
void test(uint16_t x, uint16_t y)
{
// warning: conversion to 'uint16_t' from 'int' may alter its value
uint16_t value = (x + 1) * y;
...
}
Run Code Online (Sandbox Code Playgroud)
所有这三个值都是无符号的16位整数,并且任何算术溢出都可以正确执行,而不会警告它这个平台int是16位的,我不会看到这段代码应该写的另一种方式,除了因为转换结果整数提升.
小智 6
我应该抛弃所有这些案件吗?铸造感觉就像我做错了什么.
这是正确的做法,至少如果代码应该是可移植的.如果它只是为16位平台编译,则不应该有警告,否则,通过显式转换使警告静音uint16_t:
uint16_t value = (uint16_t) (x + 1) * y;
Run Code Online (Sandbox Code Playgroud)
你无能为力:所有的算术运算都是(至少)执行的int,编译器会提醒你.根据值x和y,它很可能的结果不符合在uint16_t.明确地写出你已经知道的演员文件,要么截断,要么保证不会发生.
| 归档时间: |
|
| 查看次数: |
79 次 |
| 最近记录: |