c中的全局变量声明

时间:2016-09-29 14:47:26

标签: c global-variables declaration variable-declaration redeclaration

#include<stdio.h>
int check,check;
void main(){
    printf("Hello!!");
}

当我编译这段代码时,一切正常,但是当我在主函数中给出它时,

#include<stdio.h>
void main(){
int check,check;
    printf("Hello!!");
}

我收到类似

的错误
C:\MinGW\bin>cc ex1.c
ex1.c: In function 'main':
ex1.c:4:11: error: redeclaration of 'check' with no linkage
 int check,check;
           ^
ex1.c:4:5: note: previous declaration of 'check' was here
 int check,check;
     ^

为什么会这样?

1 个答案:

答案 0 :(得分:1)

这在全球范围内是可行的,因为这被认为是暂定的定义。

引用C11,章节§6.9.2

  

具有没有初始化程序的文件范围的对象的标识符声明,以及   没有存储类说明符或存储类说明符static,构成一个   暂定的定义。

但是,在块范围(功能范围)中,没有暂定的定义,因此代码尝试创建两个具有相同名称的标识符,这是重新声明错误,因为它们实际上表示同一个对象。

您可以详细了解here

也就是说,自C99以来,对于托管环境,void main()不再是有效签名,至少必须为int main(void)