#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;
^
为什么会这样?
答案 0 :(得分:1)
这在全球范围内是可行的,因为这被认为是暂定的定义。
引用C11
,章节§6.9.2
具有没有初始化程序的文件范围的对象的标识符声明,以及 没有存储类说明符或存储类说明符
static
,构成一个 暂定的定义。
但是,在块范围(功能范围)中,没有暂定的定义,因此代码尝试创建两个具有相同名称的标识符,这是重新声明错误,因为它们实际上表示同一个对象。
您可以详细了解here。
也就是说,自C99
以来,对于托管环境,void main()
不再是有效签名,至少必须为int main(void)
。