编译原理我没有学过,所以可能无法完美的回答你的问题,但我给出我的想法,供你参考。
首先你要知道IF()的那个括号里面放的是什么,它放的是一个表达式,而且是一个可以判断真假的表达式。那什么是表达式呢?也话你觉得这个问题不难回答,但实际上表达式的内容是很宽泛的,包括算术表达式、关系表达式、逻辑表达式、赋值表达式、条件表达式、逗号表达式等等几种。那么回过头来,IF语句的那个括号里面放的就是个逻辑表达式。现在再说a++,根据ANSI的规定,其自增运算是在表达式结果计算完成之后再进行的,比如你的例子,它是先判断a==0是真是假,结果是FALSE,然后再自增。你写的例子的执行过程也必需是这样的。值得注意的是逗号表达式,它就因编译器的不同得到不同的结果,了解即可。
不是,有两种编译器,一种的a++在判断a==0后自加,一种是先自加再判断,vc和vs的编译器就有点不一样
程序的执行结果和编译器没多大关系的。a++都会执行。
我理解你的意思是想问是不是编译器在编译的时候会进行优化,去掉不会执行和无意义的语句,如果 是if(a ==0);这样的语句肯定会被编译器编译时直接去掉,想你那种语句,很可能被优化为 a++;
但这和具体的编译器有关
是的,这是语言特性,与编译器没有关系。