【问题标题】:Global variable declaration in c [duplicate]c中的全局变量声明
【发布时间】:2016-09-29 14:47:26
【问题描述】:
#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;
     ^

为什么会这样?

【问题讨论】:

  • 您声明了 2 个具有相同名称的变量。变量名只能包含下划线、字母和数字。

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


【解决方案1】:

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

引用C11,第 6.9.2 章

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

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

您可以阅读更多关于它的信息here

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

【讨论】:

  • 明确一点:文件范围内的两个check 表示同一个对象! (而且“函数范围”的限制太大。对于块范围来说总是如此)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多