添加两个字符并将结果分配给C中的int
int main(){
char a = -5;
char b = -6;
int c = a+b;
return 0;
}
我在不同的体系结构中得到了不同的结果,使用gcc.
对x86变量c进行了正确的符号扩展,我得到-11.
在其他一些架构c上没有符号扩展,你得到a+b位转换为 an的结果,int我得到501.
这是未定义的行为吗?
回答
char有时是无符号类型。使用signed char或者unsigned char如果您需要明确说明它。将打印添加到您的程序并在这两种情况下编译显示您的行为:
$ make example && ./example
cc example.c -o example
-11
对比:
$ CFLAGS=-funsigned-char make example && ./example
cc -funsigned-char example.c -o example
501