小编min*_*ess的帖子

块范围链接C标准

以下标识符没有链接:声明为对象或函数以外的任何标识符; 声明为函数参数的标识符; 没有存储类说明符extern声明的对象的块作用域标识符.

{
    static int a; //no linkage
}
Run Code Online (Sandbox Code Playgroud)

对于在该标识符的先前声明可见的范围内使用存储类说明符extern声明的标识符,如果先前声明指定内部或外部链接,则后面声明中的标识符的链接与链接相同在先前的声明中指明.如果没有先前声明可见,或者先前声明未指定链接,则标识符具有外部链接.

{
    static int a; //no linkage
    extern int a; //a should get external linkage, no?
}
Run Code Online (Sandbox Code Playgroud)

GCC错误:没有链接的以下声明的extern声明

有人可以解释我为什么会出现这个错误?

谢谢

c standards scope extern linkage

6
推荐指数
1
解决办法
4369
查看次数

静态声明后的非静态声明

考虑以下示例:

static int a;
extern int a; //OK -- what linkage does the a have now?

static int a;
int a; //ERROR

extern int a;
static int a; //ERROR

int a;
static int a; //ERROR

extern int a;
int a; //OK as expected

int a;
extern int a; //OK as expected
Run Code Online (Sandbox Code Playgroud)

为什么在第一个示例中可以,但在第二个示例中不行?

就文件范围变量(全局范围)而言,当没有指定关键字时,这些变量具有外部链接和静态持续时间。

谢谢

AFAIK,函数的链接和存储持续时间有点不同。

编辑:我试过使用 gcc 4.5.2 -Wall -pedantic --std=c99 进行编译

更多关于:http : //c-faq.com/decl/static.jd.html你可以看到第一个例子也可以在那里工作,但第二个例子没有。但是,我看不出是什么让它们如此不同。

c storage duration linkage

5
推荐指数
1
解决办法
7223
查看次数

标签 统计

c ×2

linkage ×2

duration ×1

extern ×1

scope ×1

standards ×1

storage ×1