c++ - C for 循环的实现方式与其他语言不同?

标签 c++ c knuth

我在 Knuth 的“计算机编程艺术”的评论中读到以下内容:

“非常‘实用性’意味着想成为 CS 专业的学生必须学习 Kernighan 在设计 C 时的错误,尤其是臭名昭著的事实,即 for 循环重复评估 for 条件,它重复 while 并且无法匹配大多数其他实现 for 循环的语言。”

( http://www.amazon.com/review/R9OVJAJQCP78N/ref=cm_cr_pr_viewpnt#R9OVJAJQCP78N )

这家伙在说什么?你怎么能实现一个 for 循环,而不仅仅是 for 循环的语法糖?

最佳答案

考虑一下:

for i:=0 to 100 do { ... }

在这种情况下,我们可以将最终值 100 替换为函数调用:

for i:=0 to final_value() do { ... }

... final_value 函数只会被调用一次。

然而,在 C 中:

for (int i=0; i<final_value(); ++i) // ...

... final_value 函数将在循环中的每次迭代中被调用,因此更详细的做法是一个好习惯:

int end = final_value();
for (int i=0; i<end; ++i) // ...

关于c++ - C for 循环的实现方式与其他语言不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/229671/

相关文章:

C++ 格式化输入必须匹配值

c++ - [C++14]我正在使用 pair 但没有输出

c++ - 在 cpp unordered_map 的自定义哈希函数中插入不起作用

c - 使用分而治之的矩阵乘法

C++排序算法

c - 内存字长异常的 "char*"(Knuth 的 MIX 架构)

c++ - 将 boost::make_recursive_variant 与元组一起使用

c# - 系统.DllNotFoundException : Unable to load DLL 'i2c.so'

宏的名称可以用作常规宏和字符串吗

algorithm - Donald Knuth 的 MIX 计算机