156
|
Chris Cooper · 技术社区 · 15 年前 |
![]() |
1
272
|
![]() |
2
183
我更喜欢
一是一些编译器在
另一个是我认为
|
![]() |
3
57
就我个人而言
|
![]() |
4
51
|
![]() |
5
46
在任何一个健全的编译器中,它肯定不会更快。它们都将被编译成无条件跳转。for版本更容易输入(正如Neil所说),如果您理解for循环语法,它将变得更清晰。 如果您好奇,下面是GCC4.4.1为x86提供的信息。两者都使用x86 JMP 说明。
编译为(部分):
|
![]() |
6
44
我更喜欢
然而,
|
![]() |
7
21
我个人更喜欢
无限循环构造应该很容易在代码中被注意或调用,我个人认为
另外,我记得当while循环的控制表达式是常量时,有些编译器会发出警告。我不认为这种情况发生得太多,但仅仅是潜在的虚假警告就足以让我想避免它。 |
![]() |
8
19
我见过一些人喜欢它,因为他们有这样的定义:
这样他们就可以写下:
|
|
9
16
|
![]() |
10
13
在生成的机器代码方面没有区别。
|
![]() |
11
11
不仅是一个众所周知的模式,而且是C(和C++)中的标准习惯用法 |
![]() |
12
11
首选。 |
![]() |
13
11
如果您的代码是由编译器优化的,则两者应该是相同的。为了解释我所说的优化,下面是用MSVC 10编写的示例代码:
没有任何优化(/Od)
)拆卸显示出明显的区别。有额外的说明
不管你用哪一个都不重要,因为一个有速度优化功能的好编译器是开着的。 |
![]() |
14
10
这是个人喜好的问题,哪条路更快。就我个人而言,我是一个触摸打字员,在编程过程中从不看键盘——我可以触摸键盘上的所有104个键。
我在心里加了一些手指运动的测量值,然后把它们加起来。 “对于(;)”有大约12个键宽的来回和第四次移动(在home键和键之间,以及home键和SHIFT键之间) 但是,我在输入后者时不太容易出错。我在心里一次用词思考,所以我发现像“nIndex”这样的单词比像“nIdx”这样的缩写词打字要快,因为我必须在心里把字母拼出来,而不是在心里说出来,让我的手指自动打字(比如骑自行车)
|
![]() |
15
6
所有好的答案-行为应该完全相同。 不过,假设它确实起了作用。假设其中一个在每次迭代中多执行3条指令。
只有当你在循环中做的是 几乎什么都没有 几乎从来没有 这个案子。 我的观点是,有微观优化和宏观优化。微优化就像“理发减肥”。 |
![]() |
16
5
我无法想象一个有价值的编译器会产生任何不同的代码。即使它这样做了,也没有办法在不测试特定编译器的情况下确定哪个编译器更有效。
不过我建议你还是
|
![]() |
17
5
是比以下更清楚的:
|
![]() |
18
4
“forever”循环作为后台循环在嵌入式系统中很流行。有些人将其作为:
另一个实现是:
|
![]() |
19
3
看起来程序员在for循环中遗漏了一些东西 :) |
![]() |
20
2
使用“for(;;)”最重要的原因是在进行探索性编程时害怕使用“while(TRUE)”。用“for”更容易控制重复的次数,也更容易将“for”循环转换为无限循环。
当我确定了我的函数,然后我把它转换成一个无限循环:
|
![]() |
21
0
正如其他人所指出的,从技术角度看,这一点都不重要。有些人认为其中一个比另一个更易读,他们对哪一个有不同的看法。
对我来说,这基本上只是吹毛求疵,因为任何C程序员都应该能够做到
立即
认识两者
你的定义行不通。但是,您可以(但不应该)这样做:
但真的,不要这样做。。。 |
![]() |
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
![]() |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
![]() |
rainer · 后台插入程序的初始化 1 年前 |
![]() |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
|
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
|
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |