【发布时间】:2014-01-14 18:37:36
【问题描述】:
想知道为什么我不能在for循环初始化中声明一个静态变量,如下所示,
for(static int i = 0;;)
用我的C99标准编译器编译上面的循环语句代码我看到了下面的错误,
error: declaration of static variable ‘i’ in ‘for’ loop initial declaration
【问题讨论】:
-
因为语言不允许?这在什么情况下有用?
-
每当我遇到这样的“奇怪”错误信息时,我都喜欢思考。在某些时候,事实总是证明,如果某事是不允许的,那么它就是不允许的——通常是因为它没有意义(如本例所示)。
-
@OliCharlesworth:虽然我同意这是没有意义的,并且该语言不应该/不允许这样做,但我实际上在 C99 中找不到任何明确禁止这样做的文本。 §6.2.2、§6.2.4、§6.7.1 和 §6.8.5.3 均未提及对
for循环 AFAICT 的clause-1声明的任何限制。 -
@OliCharlesworth 啊实际上它在 §6.8.5 的顶部,我不知何故错过了(感谢@Chux!)
-
@OliCharlesworth 在
for循环内我有一个带有索引为[0, Size-1]的数据包数据的圆环,应该通过环按顺序读取。所以我尝试声明静态,因为我的函数被每个数据包调用。我知道在for之外声明它会对我有所帮助。