char类型的可移植性问题

作者在 2010-02-25 22:42:14 发布以下内容
1、ANSI C 标准没有规定char类型在默认情况下是有符号的还是无符号的,因此,由于隐式升级规则,将可能导致极端混乱的行为,如:
char c ;
c = 0xFF ;
if( c == 0xFF)
{
     //相关代码,此处是否执行将会取决于你的编译器
}
如果编译器将char类型当做有符号类型的话,将不会执行大括号里面的代码,由于隐式升级规则,char将升级为int型,也就是说,转换后,c的值为0xFFFFFFFF,和0xFF比较的话,当然是不等的。
 
如果是无符号的话,那将会测试成功。又如:
char c ;
while( (c = getchar())!= EOF)
    processchar() ;
EOF的被定义为-1,如果在char类型为无符号类型的系统上,将无法退出while循环
Portable | 阅读 754 次
文章评论,共0条
游客请输入验证码
文章归档