为什么16位编译器会给未读取的char []声明带来错误?

时间:2018-02-20 20:35:49

标签: c++ 16-bit

这是代码:

unsigned char A[] = { 'a', 'b', 12, 256, 'c', 28 };

它使用x64编译器在VS中编译得很好。但是16位编译器给出了一些错误,遗憾的是我不知道是什么样的错误。问题是为什么16位在这种情况下会出错。你能解释一下吗?

1 个答案:

答案 0 :(得分:1)

char始终是一个字节,因此无论您的平台是16位还是64位字都不重要(尽管您使用{{1}的系统我们会说话!)。可能更重要的是你的16位编译器(是的,我假设Turbo C ++)是在20世纪80年代,比C ++的第一个标准版本早十年,所以它的整体表现有点不同。

在这种情况下,它不太容忍值CHAR_BIT != 8,它实际上大于可以存储在256(签名或其他)中的值。我说它错了"但是很难不符合当时不存在的标准。在这个意义上,Turbo C ++可以自由地做它自己的事情 - 它不是实际上 C ++,就像我们理解术语" C ++&#34一样;今天。

我希望您的Visual Studio编译器发出编译器警告...然后使用环绕初始化char,因为这是无符号值的工作方式。