我第一次接触 C 语言时被告知要在函数顶部声明变量。现在我对该语言有了较强的掌握,我正在关注编码风格,尤其是限制变量的作用域。我已经阅读了关于限制作用域的好处的文章,并遇到了一个有趣的例子。显然,C99 允许您这样做...
for (int i = 0; i < 10; i++)
{
puts("hello");
}
我曾经认为,变量的作用域由最内层的“周围”大括号{ }限制,但在上面的例子中,即使它在大括号外声明,int i的作用域似乎也受到for循环的大括号的限制。我尝试使用fgets()扩展上面的示例来执行我认为类似的操作,但这两个示例都给了我语法错误。
所以,在C99中到底哪里可以合法地声明变量?for循环的例子是规则的例外吗?这是否也适用于while和do while循环?
注意:即使我可以在那里声明char数组,我也不确定这是否在语法上正确,因为fgets()正在寻找指向字符的指针,而不是指向80个字符数组的指针。这就是为什么我尝试了malloc()版本的原因。