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

c – 变量声明方法

发布时间:2020-12-16 07:07:26 所属栏目:百科 来源:网络整理
导读:我猜这是一个新手问题,但我似乎错过了某个地方,加上我是新手,所以如果答案显而易见,那就不要太吝啬…… 我看过多种方式声明的变量: DataType varName = value;DataType varName(value);DataType varName{value}; 我认为这是作家选择情况之一,但最近我试图添
我猜这是一个新手问题,但我似乎错过了某个地方,加上我是新手,所以如果答案显而易见,那就不要太吝啬……

我看过多种方式声明的变量:

DataType varName = value;
DataType varName(value);
DataType varName{value};

我认为这是作家选择情况之一,但最近我试图添加2个char变量并将其设置为另一个char变量,我使用了大括号版本:

unsigned char sum{ char1 + char2 };

我收到一个错误:
错误1错误C2398:元素’1’:从’int’转换为’unsigned char&’需要缩小转换.

但我没有得到这个错误:

unsigned char sum(char1 + char2);

那么有人可以解释声明之间的区别或提供一个链接到一个网站吗?

谢谢…

解决方法

TL; DR:当你添加两个字符时,你得到一个int,并且大括号初始化故意不允许这样的赋值.

C,与C一致,执行整数提升以进行添加;因此,表达式char1 char2的类型(假设char1和char2都是char类型)不是人们所期望的char,而是int.标准的相关部分是§4.5(描述整体促销),§4.13(积分转换)和§5.7(附加运算符,它引起整体促销).

至于为什么这会导致语句unsigned char sum {char1 char2};如果失败,大括号初始化专门用于帮助阻止程序员执行缩小转换(第8.5.3节),这可能会导致溢出.因为int至少是char的两倍(在八位字节可寻址的机器上*),这是一个缩小的转换,因此失败.

当然,最后,你可能想停下来问自己,“无论如何,添加两个角色究竟是什么意思?”

*对于感兴趣的人,C表示int足够大,至少可以保存INT_MIN到INT_MAX(§3.9.2)的值,并将这些宏的定义委托给C(§18.3.3.2),后者给出了它们(附件E,§1)最小值分别为-32767和32767 **.因此,int需要至少16位.另一方面,char至少为8位宽. C还将char定义为一个字节宽(§6.2.5.3,§5.2.1),其中一个字节(§3.6)是“可寻址的数据存储单元,其大小足以容纳执行的基本字符集的任何成员环境.”严格地说,我认为char可以通过这个定义大于一个字节,但我很确定它不能比任何其他类型更宽.

**那是-32767,而不是-32768. C显然实际上并没有对实现强加有符号整数的二进制补码表示.

(编辑:李大同)

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

    推荐文章
      热点阅读