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

Ami*_*mar 6 c

我有下面的C代码,我希望它抛出一个错误,如"多个变量声明",但它没有这样做.

#include <stdio.h>

int i;        
int i;    

int main()
{
    printf("%d",i);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

现在的输出是0,但为什么呢?

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

#include <stdio.h>


int main()
{
    int i;        
    int i;    

    printf("%d",i);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

O/p是重新声明我的错误

pmg*_*pmg 17

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

标准引用:

6.9.2/2

具有没有初始化程序的文件范围且没有存储类说明符或存储类说明符为静态的对象的标识符声明构成暂定定义.如果翻译单元包含一个或多个标识符的暂定定义,并且翻译单元不包含该标识符的外部定义,那么行为就像翻译单元包含该标识符的文件范围声明一样,复合类型为翻译单元的结尾,初始化程序等于0.

  • +1引用精确相关的章节和诗句. (4认同)