这是代码:
unsigned char A[] = { 'a', 'b', 12, 256, 'c', 28 };
它使用x64编译器在VS中编译得很好。但是16位编译器给出了一些错误,遗憾的是我不知道是什么样的错误。问题是为什么16位在这种情况下会出错。你能解释一下吗?
答案 0 :(得分:1)
char
始终是一个字节,因此无论您的平台是16位还是64位字都不重要(尽管您使用{{1}的系统我们会说话!)。可能更重要的是你的16位编译器(是的,我假设Turbo C ++)是在20世纪80年代,比C ++的第一个标准版本早十年,所以它的整体表现有点不同。
在这种情况下,它不太容忍值CHAR_BIT != 8
,它实际上大于可以存储在256
(签名或其他)中的值。我说它错了"但是很难不符合当时不存在的标准。在这个意义上,Turbo C ++可以自由地做它自己的事情 - 它不是实际上 C ++,就像我们理解术语" C ++&#34一样;今天。
我希望您的Visual Studio编译器发出编译器警告...然后使用环绕初始化char
,因为这是无符号值的工作方式。