在范围内和范围外定义外部变量

defining extern variable inside of the scope and outside of the scope

我在范围内和范围外都定义了extern a

a.c

int a;

void foo(void)
{
    a = 3;
}

b.c

extern int a = 10; /*same as "extern a; int a = 10?" */


void foo(void);

int main(void)
{
    foo();
    printf("%d", a);
}

这段代码定义明确吗?

由于 a.

的多重定义,这会导致标准 C 中出现未定义的行为

实现有一个通用扩展,允许多个定义,只要最多初始化一个即可。

有关详细信息,请参阅:


extern int a = 10;int a = 10; 相同,后者与 extern int a; int a = 10; 相同。变量定义具有外部链接,除非指定为静态(或标识符已在同一范围内声明为静态)。

extern int a = 10; 等同于 int a = 10;

如果您同时拥有这两种代码,则代码不会 link,因为您的项目中会有多个静态存储变量的定义 a