【发布时间】:2018-01-15 18:56:32
【问题描述】:
为什么这在全球范围内有效:
static int a;
static int a=0;
但不在函数体内:
void foo()
{
static int b;
static int b=0; //error: Duplicate declaration of global variable 'b'
...
使用 clion 2017.3.1、C99、gcc5.4
【问题讨论】:
-
@EugeneSh.,等。我不认为这是引用问题的重复。引用的候选重复问题没有解决函数内声明/定义的静态变量与函数外声明/定义的静态变量之间的不一致。
-
我认为问题本身正在解决它:暂定定义是没有存储类说明符和初始化程序的任何外部数据声明。
-
@EugeneSh。是的,我明白你的意思。我认为它部分回答了这个问题,或者至少对于 OP 的场景来说不够明确。
-
@EugeneSh。这个措辞很不幸,因为带有存储类说明符 static 的文件范围声明也构成了一个暂定定义。最好使用 C 中的定义:“具有文件范围的对象的标识符声明没有初始化程序,并且没有存储类说明符或存储类说明符静态,构成一个暂定定义。”
标签: c variables duplicates global declaration