ANSI C - 变量范围

时间:2018-01-10 10:39:28

标签: c

这里的C ++程序员,最近被用来做一些C编程。 寻找有关ANSI C兼容代码中变量范围规则的复习。

以下代码符合ANSI C吗?

j

变量for()是否需要在函数开头声明? 我的理解是while()隐含地开始了新的范围。那是;甚至在开幕式之前。

这同样适用于if()do.. while()吗? 那么{{1}}呢?

范围规则在C89和C99之间是否有所不同?

2 个答案:

答案 0 :(得分:5)

  

变量j是否需要在函数的开头声明?

是的,如果您使用的是C89。或者,至少你需要引入一个{ ..}的范围并声明它。

  

同样适用于while()和if()吗?那怎么办..而()?

语法不允许声明变量(即while (int i = 0)无效)。但是你可以声明 insde 它们在所有C标准中都是允许的。

  

C98和C99之间的范围规则是否有所不同?

没有C98,但是C99及更高版本中的规则发生了变化,并允许您在for循环中声明变量(就像在代码中一样)。

  

以下代码符合ANSI C吗?

这取决于“ANSI C”所指的内容。它在C99及更高版本中有效。

答案 1 :(得分:1)

>> My understanding is that for() implicitly starts a new scope. That is; even before the opening brace.

正确。 来自C11 standards#6.8.5p5 Iteration statements

  

迭代语句是一个块,其范围是其封闭块范围的严格子集。循环体也是一个块,其范围是迭代语句范围的严格子集。

这同样适用于C99

>> Does the same apply for while() and if()? And what about do.. while() ?

if()while()do..while()循环中,您无法声明变量,如if (int j = 0)while(int j = 0)