[英]Why 16-bit compiler gives error for unsingned char[] declaration?
这是代码:
unsigned char A[] = { 'a', 'b', 12, 256, 'c', 28 };
它使用 x64 编译器在 VS 中编译良好。 但是 16 位编译器给出了一些错误,不幸的是我不知道是哪种错误。 问题是为什么在这种情况下 16 位会出错。 你能解释一下吗?
char
始终是一个字节,因此您的平台是 16 位还是 64 位字并不重要(尽管如果您使用的是CHAR_BIT != 8
的系统,我们将讨论!)。 可能更重要的是您的 16 位编译器(是的,我假设是 Turbo C++)来自 1980 年代,比 C++ 的第一个标准版早十年,所以它的整体行为有点不同。
在这种情况下,它对值256
较低,该值实际上大于可以存储在char
(有符号或其他方式)中的值。 我会说这是“错误的”,但很难不遵守当时不存在的标准。 从这个意义上说,Turbo C++ 几乎可以自由地做自己的事情——它实际上不是 C++,就像我们今天理解的术语“C++”一样。
我希望您的 Visual Studio 编译器发出编译器警告......然后使用wraparound初始化unsigned char
,因为这就是无符号值的工作方式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.