百度首页 | 百度空间
 
查看文章
 
[C 语言] for vs while
2008年07月08日 星期二 20:11

  UMU 习惯优先使用 for。

  1. 无限循环

while (1) { ... }

for (;;) { ... }

  for 胜出!理由:更短,而且不需要判断。『注:开启优化时,编译器会把这个判断优化“掉”!』

  2. 只循环一次

do { ... } while (0);

for (;;) { ... break; }

  平手!理由:你比我短,但我不需要判断。『注:开启优化时,编译器会把这个判断优化“掉”!』

  3. 至少循环一次

int b = 0;
do
{
        // do something at least one time
} while (b);

int b = 0;
for (; ;)
{
        // do something at least one time

        if (!b)
        {
                break;
        }
}

  4. 已知次数循环

  代码省略……因为很明显是 for 胜出!

  5. 其它

while (b = Func()) { ... }

for (b = Func(); b; b = Func()) { ... }

  while 胜出!理由:短!


类别:C | 添加到搜藏 | 浏览() | 评论 (14)
 
最近读者:
 
网友评论:
2
2008年07月08日 星期二 23:37
我觉得,应该多关注一些实质的东西。。。
这些表层上的语法没必要这么研究。。
 
3
2008年07月09日 星期三 09:33
没说这是研究……是有人说 for 与 while 无法互相取代,我才写给他看的,他觉得“3. 至少循环一次”用 for 无法实现。
 
4
2008年07月09日 星期三 09:46
把判断优化掉什么意思?是把for(;;)删除了吗?删除的话不就不能循环了么?
 
5
2008年07月09日 星期三 16:48
是把 while 判断 0 和 1 的代码优化掉
 
6
2008年07月16日 星期三 21:53
细节决定成败
 
7
2008年07月26日 星期六 03:50
请教。『注:开启优化时,编译器会把这个判断优化“掉”!』
是什么意思?
 
8
2008年07月26日 星期六 03:51
不好意思我刚才没看评论
 
9
2008年08月04日 星期一 09:47
呵呵,这是c语言循环概念的基本内容

不清楚的人,可能是初学者吧???
 
10
2008年09月03日 星期三 12:26
习惯写成
while (1),while(0)
的,我推测你不是还没参加工作,就是贵公司对代码质量要求不太高

还有,编译器真是万能,按照人们想象的方式工作......

 
11
2008年09月03日 星期三 20:08
To salogel :

1. 首先注意这是 C 语言,不是 C++,所以不用 true、false;

2. 这是纯粹讨论语法,所以不用 TRUE、FALSE,否则有些初学者不明白要 #include ××;

3. 很多著名的库、代码都直接用 while(0),比如 MFC、Linux 内核代码、ACE 代码。您要是不服我,那也得服他们吧;

4、这篇是写给某 C 语言入门级的朋友看的,很明显您是不需要看的。

5、我们公司的代码规范是出名的好,所以不会在无关紧要的地方钻牛角尖。
 
12
2008年09月04日 星期四 09:17
不要激动,呵呵.
我只是建议写成:
while((0)),while((1)),这样的,如果你有过在半夜因为这样的一个build warning被叫到公司的经历的话,你印象会更加深刻的^_^

btw,代码质量那句我只是瞎猜,不过while(0)这样的代码不会在贵公司引起build warning吗?这个是怎么处理的?

还有关于``无关紧要的地方'',可能是屁股决定脑袋的选择了;做民工的自然会认为只要做好自己该做的,其他的与我无关,所以把自己的事情做得尽量细致是一个打杂的本分.从你其他的帖子看来,你我角色显然不一样,不过这个没关系.求同存异,共同发展.
 
13
2008年09月04日 星期四 14:54
在 3 级警告里是不会提示,4 级才会,我们用的大部分库都只要求到 3 级,Release 时先用 4 级检查,如果都是已知的警告,就算通过。
 
14
2008年09月04日 星期四 15:03
我在 VS2008+SP1 Warning Level 4 下测试 while((0)),while((1)),这样的代码,依然会警告

warning C4127: conditional expression is constant

不知您还有什么高招。
 
15
2008年09月04日 星期四 19:24
http://msdn.microsoft.com/en-us/library/6t66728h(VS.80).aspx

vc下,确实if((1))这样不可以,这个问题是我土鳖了....

armcc,今天试了一下也不行,回头查一下当时怎么处理warning的.
 
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码:
 

     

©2008 Baidu