繁体   English   中英

为什么 16 位编译器会为 unsingned char[] 声明给出错误?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM