C编译器使用常量的默认行为

时间:2013-12-07 09:07:33

标签: c compiler-construction casting type-conversion

说我做了以下事情:

char x;

x = x + 077;

在这种情况下,即使表达式分配给char,常量077的默认类型为int吗?从读取K& R我推断出+运算符的优先级高于=,而077(八进制)的默认类型为int,因此x的值被提升为int。然后执行加法运算,然后将答案转换回char并分配给x。这是对的吗?

以下两个表达式是否会发生相同的行为?:

x += 077
x += 1

此外,如果在表达式中使用以下内容会发生什么:

(char) 14

默认情况下,第一个是第一个int,然后减少为一个char,或者它是一个以字符开头的字符吗?

char x;

x = 14;

另外,在这种情况下,首先是14,然后将其缩减为char,或者它是以char开头的?

1 个答案:

答案 0 :(得分:2)

141077是整数文字,它们始终是int或更大的类型,绝不是char。该类型不依赖于上下文。 (有关实际类型的详细信息,请参阅C99§6.4.4.1。)

复合作业a += b的行为与对应的a = a + b表达式完全相同,只是a只评估过一次:

  

(C99§6.5.16.2/ 3)E1 op = E2形式的复合赋值与简单赋值表达式E1 = E1 op (E2)的区别仅在于左值E1仅被计算一次。< / p>