从64位转换为32位时,Gcc不会发出任何警告

btb*_*snc 4 c++ gcc casting

这是我的代码:

int main()
{
    uint64_t a = 100;
    uint32_t b = a;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Gcc命令:

~$ gcc -o 1 1.c -Wall
~$
Run Code Online (Sandbox Code Playgroud)

任何人都可以给我一些帮助吗?

For*_*veR 5

使用-Wconversion选项.

-Wconversion对可能改变值的隐式转换发出警告.这包括实数和整数之间的转换,如x为double时的abs(x); 有符号和无符号之间的转换,如无符号ui = -1; 和转换为较小的类型,如sqrtf(M_PI).不要警告显式转换,如abs((int)x)和ui =(unsigned)-1,或者如果转换没有像abs(2.0)那样改变值.可以使用-Wno-sign-conversion禁用有关有符号和无符号整数之间转换的警告.

对于C++,还警告用户定义的转换混淆重载分辨率; 和从不使用类型转换运算符的转换:转换为void,相同类型,基类或对它们的引用.默认情况下,在C++中禁用有符号和无符号整数之间的转换警告,除非明确启用了-Wsign-conversion.

在你的代码上:

从«uint64_t {aka long long unsigned int}»转换为«uint32_t {aka unsigned int}»可能会改变其值[-Wconversion]