c – 变量声明方法
我猜这是一个新手问题,但我似乎错过了某个地方,加上我是新手,所以如果答案显而易见,那就不要太吝啬……
我看过多种方式声明的变量: DataType varName = value; DataType varName(value); DataType varName{value}; 我认为这是作家选择情况之一,但最近我试图添加2个char变量并将其设置为另一个char变量,我使用了大括号版本: unsigned char sum{ char1 + char2 }; 我收到一个错误: 但我没有得到这个错误: 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显然实际上并没有对实现强加有符号整数的二进制补码表示. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |