C语言中if条件问题

# include <stdio.h>

int main()
{
int a=1;

if(a++==0);

}
在这,if里面的条件无论在什么编译器下面运行if里面的a++都会执行吗?或者说a都会执行自增吗?

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

就算里面条件为假,不管什么编译器都会将a进行自加吗?

追答

对呀,判断结束后a就执行++

本回答被提问者采纳
第3个回答  2013-09-27
我理解你的意思是想问是不是编译器在编译的时候会进行优化,去掉不会执行和无意义的语句,如果 是if(a ==0);这样的语句肯定会被编译器编译时直接去掉,想你那种语句,很可能被优化为 a++;
但这和具体的编译器有关
第4个回答  2013-09-27
是的,这是语言特性,与编译器没有关系。
相似回答