c proplem

来源:百度知道 编辑:UC知道 时间:2024/05/19 07:18:05
#include "stdio.h"
void main()
{
if(1>0)
{
printf("one is bigger than zero);
};

}

问题:在C语言中,IF语句体后面的分号可以不要,但是加上分号与不加分号有什么区别?

哪位大虾回答下,回答好的有加分!!
我也知道是空语句啊,但是这是一家NB软件公司的面试题目,答案不是那样的吧?主要问是之间的区别是什么?是不是编译的时候效率上有什么不同?

不是效率的问题,加了分号逻辑就不同了。
对于这个程序无论加分号与否都会执行printf,但是如果if后面是个不确定的值则if后面的语句无论如何都会被执行。
总之加了分号相当于这个if判断没用。
例如:

if(X>0);//有分号相当于这里有个空语句printf无论如何都会执行。
{
printf("one is bigger than zero);
};

貌似楼上的都申题不清。
问题是{....};中花括号外的分号的用处。这个分号在编译时可能有提高效率的用处吧。编译器分析花括号嵌套时用的是递归下降,这个分号可能起到提示语句结束位置的作用,从而让编译器效率增加(比如减少递归层数)。
这是我猜测的,楼主还是去看看 编译原理 的课本吧。你搞软件的不会连这个都不学吧?

加上后相当于空语句呀,就是只判断但什么都不执行,不加上的话会执行你{}内的内容,但是上面要是if后加上;的话恐怕编译不了。多了{}个东西了。

当进行编译的时候,编译器语义分析后,
可以分为if(1>0)
{
printf("skjdfkjsdf");
}
和 ;两部分.
正如前一位仁兄所说,可以在让编译器提高效率.
但这是两个不同的语句,按照这样的代码在转化成中间语言的时候同样也会产生两个语句.这种语句在大规模执行过程中,会降低执行效率,如果是做嵌入式开发,会多占用内存.
是有一些编译器在进行代码优化的时候会处理这些冗余的语句.
但这又会增加编译的时间.
最终这样作到底有没有提高编译效率.只有参考你所用的编译器的具体编译算法.
顺问一句,这是那个公司的题目.

没有用处的!

没有任何用!

语法而以

当然是效率慢了,多执行了一行语句啊