如果gcc -Wconversion没有显式(=丑陋)强制转换,您将如何删除以下代码生成的警告:
int main()
{
int val;
unsigned char c1 = (val % 65536) / 256;
unsigned char c2 = (val % 65536) % 256;
}
Run Code Online (Sandbox Code Playgroud)
有没有办法告诉编译器显然演员是在(% 65536) / 256或期间隐含地完成的% 256
以供参考
$ gcc -Wconversion w.c
w.c: In function ‘main’:
w.c:4:36: warning: conversion to ‘unsigned char’ from ‘int’ may alter its value [-Wconversion]
w.c:5:36: warning: conversion to ‘unsigned char’ from ‘int’ may alter its value [-Wconversion]
Run Code Online (Sandbox Code Playgroud)
使用静态强制转换(或将结果转换为unsigned char)
int main()
{
int val;
unsigned char c1 = (unsigned char)((val % 65536) / 256);
unsigned char c2 = (unsigned char)(val % 256);
}
Run Code Online (Sandbox Code Playgroud)
这将切断警告,因为它基本上告诉编译器,"等等,我打算这样做".
如果您打算不使用签名的VALUES,那么应该从以下开始:
unsigned int val;
Run Code Online (Sandbox Code Playgroud)
代替:
int val;
Run Code Online (Sandbox Code Playgroud)
即使这样做,您也需要从unsigned int转换为unsigned char,因为编译器最终仍然认为您并不意味着按照您的方式进行下转换.
| 归档时间: |
|
| 查看次数: |
7006 次 |
| 最近记录: |