wat*_*ain 6 c int casting typedef
我有以下C代码:
typedef unsigned char uint8_t;
void main(void) {
uint8_t a = 1, b = 2, res;
res = a + b;
}
Run Code Online (Sandbox Code Playgroud)
当我使用编译此代码时gcc -Wconversion,我收到以下警告:
test.c: In function 'main':
test.c:5:10: warning: conversion to 'uint8_t' from 'int' may alter its value [-Wconversion]
Run Code Online (Sandbox Code Playgroud)
有人可以解释为什么出现这个警告?所有三个变量都是类型的uint8_t,所以我真的不明白它的int来源.
我真的不明白它的
int来源.
int来自C语言标准.算术运算符的所有操作数在执行操作之前都会被提升.在这种情况下uint8_t被提升为a int,所以你需要一个强制转换来避免警告:
res = (uint8_t)(a + b);
Run Code Online (Sandbox Code Playgroud)
以下是标准定义整数促销的方式:
6.3.1.1如果一个
intcan表示原始类型的所有值,则该值将转换为aint; 否则,它被转换为unsigned int.这些被称为整数促销.
因为int可以保存所有可能的值uint8_t,a并且b被提升为int加法运算.
| 归档时间: |
|
| 查看次数: |
2773 次 |
| 最近记录: |