在C中,多次声明变量是否有效?

时间:2011-07-21 10:41:59

标签: c

我有下面的C代码,我希望它会抛出像“多个变量声明”这样的错误,但它没有这样做。

#include <stdio.h>

int i;        
int i;    

int main()
{
    printf("%d",i);
    return 0;
}

现在输出为0,但为什么?

代码下面还有一件事会给出错误预期

#include <stdio.h>


int main()
{
    int i;        
    int i;    

    printf("%d",i);
    return 0;
}

O / p是错误的说再次声明我

1 个答案:

答案 0 :(得分:17)

i的第一个定义是暂定定义(第二个定义也是暂定定义)。它们虽然是“事实上的”定义(定义也作为声明),但没有错误。

引自the Standard

  

6.9.2 / 2

     

具有没有初始化程序的文件范围的对象的标识符声明,以及   没有存储类说明符或存储类说明符静态,构成一个   暂定的定义。如果翻译单元包含一个或多个临时定义   然后,标识符和转换单元不包含该标识符的外部定义   行为就像翻译单元包含该文件范围声明一样   标识符,具有复制类型,如翻译单元的末尾,带有初始化程序   等于0。