我注意到,C11不再允许您在循环结构内声明的迭代变量,例如,以下是无效的:放置在C11(编码风格)
for (int i = 0; i < 10; ++i)
但是,这是OK:
int i;
for (i = 0; i < 10; ++i)
鉴于C99之前甚至没有可能除了在功能(块?Does C11 allow variable declarations at any place in a function?)的开头声明变量,我很好奇,如何这涉及到安全的做法。迭代器是否应该在它们所在的函数或块的顶部声明,或者只是在第一个循环之上声明它们?我看不出任何方式都有很大的不同,但前一种方法似乎对移动代码更加稳健。就安全性而言,我没有看到任何明显的影响。
此外,C11上述变化的原因是什么?我非常喜欢第一个例子中的语法。
编辑:到我最后一个问题,我想有一个问题是,如果迭代器被多次使用,在一个块内移动for (int i = 0; ...
将不那么容易重构。
你使用的是'gcc -std = c11'。如果只使用'gcc'而不指定标准,则默认为'gnu89',它不允许在for循环中声明。在ANSI C,C89中就是这样的,但是限制被删除,同时“混合声明和代码” –
我看到了,我没有使用该选项。 – bbarker
我曾假设我至少使用c99,因为我可以使用stdbool.h。 – bbarker