操作符的属性
1.操作符的优先级
2.操作符的结核性
3.是否控制求值顺序
以下为一些问题表达式
//非法表达式 - 1
int main()
{
int a = 2;
int b = 2;
int c = 2;
int d = 2;
int e = 2;
int f = 2;
int sum = a * b + c * d + e * f;//这个表达式是有问题的,因为它的算法路径不止一条。
//如果abcdef代表的是一个表达式,那就有可能出错
printf("%d\n", sum);
return 0;
}
//非法表达式 - 2
int main()
{
int c = 3;
int a = c + --c;//这里 -- 比 + 的优先级要高,所以先算--,但是前面c的放置出现歧义,是放3?还是2?
printf("%d\n", a);
return 0;
}
//非法表达式 - 3
int main()
{
int i = 1;
int ret = (++i) + (++i) + (++i);//这里详细步骤可以采用反汇编进行观测。
printf("%d\n", ret);
return 0;
}
//解决方法,把表达式拆分成没有歧义的一个个小部分