2012-04-23 108 views
0

快速一个。以下是否相同?他们中的任何一个比其他人更经济或“正确”?简写C while循环

while (x==y) {}while (x==y) ; & while (x==y);

注意结束表达式括号和第二个分号之间的空格,而不是第三个。

我一直倾向于使用过去的第一个。 Ta

+0

他们应该做什么?有更好的方法来旋转等待。 – SLaks 2012-04-23 15:24:28

+0

@SLaks只是等待条件不成立,但没有具体用例 – Toby 2012-04-23 15:25:31

回答

3

第二个和第三个没有区别。

第一个唯一的区别是可读性 - 您明确指出您想要一个无限循环,而不是您有一个错字(额外的;)。

2

它们都完全等效,应该用任何半符号编译器生成相同的程序。空白不重要,并且{};都表示空白语句。

1

通常当你最好做这样的事情,你还是把分号在自己的行作出明确表示,它不只是通过acident补充说:

while (whatever) 
    ; 

当然,你通常只这样做,当whatever有副作用,如:

// skip to end of line: 
while (((ch=getchar()) != '\n') && (ch != EOF)) 
    ; 

空语句的使用确切的语法形式是极不可能影响,虽然产生的代码,所以这纯粹是关于优化读者,而不是编译器。

+0

或“x”是易失性的。 – Toby 2012-04-23 15:41:36

+1

@Toby:......或者,“x”(当然是两者) - 这就是为什么我说“通常”。虽然'volatile'肯定是可能的,但并不是那么常见,而当你处理一个时,你通常不想像这样在一个旋转循环中进行。 – 2012-04-23 15:43:36

+0

感谢您的澄清。为什么你不想使用旋转循环进行易失性轮询? – Toby 2012-04-23 15:51:22