-1
#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;
     ^

为什么会这样?

4

1 回答 1

1

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

引用C11,第 6.9.2 章

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

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

你可以在这里阅读更多关于它的信息。

也就是说,因为C99对于托管环境,void main()它不再是一个有效的签名,它int main(void)至少必须是。

于 2016-09-29T14:49:21.093 回答