天天看点

C经典书籍笔记——C陷阱与缺陷②(语法陷阱之优先级)一、错误案列 二、优先级规律

目录

一、错误案列

 二、优先级规律

1.优先级表 

2.优先级总结

一、错误案列

1.flag的二进制表达式中只有一个1,现在判断flags二进制形式在flag为1的那一位上是否也为1:

if(flag & flags !=0);
           

2.将getc函数的返回值赋给c并判断是否为EOF:

while(c=getc(in)!=EOF);
           

3.类似2的问题再复杂些:

if(t=BTYPE(pt1->aty)==start || t==UNION);
           

以上都是有优先级问题的代码,你都能发现他们的问题吗,如果不能,来看看下面对优先级的解读和记忆。

 二、优先级规律

1.优先级表 

C经典书籍笔记——C陷阱与缺陷②(语法陷阱之优先级)一、错误案列 二、优先级规律

[结合性指的是编译器解释的顺序。例如:a,b,c自左向右解释为(a,b)c 而不是a,(b,c) ]

2.优先级总结

①()[ ]  -> . 这类非运算符优先级为1 。

②单目操作符优先级为2,类型转化也是单目操作符哦。        (自右至左)

③双目操作符优先级为3,其中

 1.算数操作符(% / *) > (+ -)        

 2.移位操作符(>>  <<)

 3.关系操作符(> ,< , >= ,<= )> (==  !=)

 4.位操作符(& > ^ > |)

 5.逻辑操作符(&& > ||)

 6.赋值操作符(=  +=  -=  &= ……)        (自右至左)

④三目操作符优先级为4,(?:)        (自右至左) [例如:(a?b,(c?,d,e ) )]

⑤,优先级为5

小提醒:在涉及赋值操作符时和容易发生错误,要考虑有无必要加上()