加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

为什么将`uint8_t`赋值给`uint8_t`会给出转换警告?

发布时间:2020-12-14 05:45:43 所属栏目:Windows 来源:网络整理
导读:为什么这段C代码: #include stdint.huint8_t do_foo() { uint8_t int8; int8 = 0x80; int8 = int8 + (uint8_t) 1; return int8;} 给这个编译器警告? $gcc --versiongcc (Debian 4.9.2-10) 4.9.2$gcc -c -Wall -Wextra -Wconversion test.ctest.c: In funct
为什么这段C代码:

#include <stdint.h>

uint8_t do_foo() {
  uint8_t int8;
  int8 = 0x80;
  int8 = int8 + (uint8_t) 1;
  return int8;
}

给这个编译器警告?

$gcc --version
gcc (Debian 4.9.2-10) 4.9.2
$gcc -c -Wall -Wextra -Wconversion test.c
test.c: In function ‘do_foo’:
test.c:6:10: warning: conversion to ‘uint8_t’ from ‘int’ may alter its value [-Wconversion]
   int8 = int8 + (uint8_t) 1;
          ^

据我所知,右边的表达式绝对是uint8_t类型,而不是int类型.

解决方法

这是由于整数提升.

操作数小于int.因此,它们被提升为int,并且在int中进行添加.

对于int8的赋值,必须将结果转换回uint8_t,从而导致警告,因为该值可能不适合.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读