int main()
{
char c = 0xff;
bool b = 0xff == c;
// Under most C/C++ compilers' default options, b is FALSE!!!
}
Run Code Online (Sandbox Code Playgroud)
C或C++标准都没有将char指定为有符号或无符号,它是实现定义的.
为什么C/C++标准没有明确地将char定义为有符号或无符号以避免像上述代码那样的危险误用?
我发现C99标准有一个语句,它拒绝类型char和signed char/unsigned char类型之间的兼容性.
C99标准注35:
在limits.h中定义的CHAR_MIN将具有值0或SCHAR_MIN之一,这可用于区分这两个选项.无论做出何种选择,char都是与其他两种类型不同的类型,并且与两者都不兼容.
我的问题是为什么委员会否认兼容性?理由是什么?如果char与signed char或unsigned char兼容,会发生什么可怕的事情吗?
除非用户在文件或项目设置中明确提到,否则是否有任何C编译器将默认类型的char作为unsigned?
/ Kanu_