在范围内和范围外定义外部变量
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
。
我在范围内和范围外都定义了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
.
实现有一个通用扩展,允许多个定义,只要最多初始化一个即可。
有关详细信息,请参阅:
extern int a = 10;
与 int a = 10;
相同,后者与 extern int a; int a = 10;
相同。变量定义具有外部链接,除非指定为静态(或标识符已在同一范围内声明为静态)。
extern int a = 10;
等同于 int a = 10;
如果您同时拥有这两种代码,则代码不会 link,因为您的项目中会有多个静态存储变量的定义 a
。