无法将变量分配给 C 中的外部变量

Can't assign variable to an extern'd variable in C

为什么这不起作用

extern int externed_variable;
int variable = externed_variable;

虽然这样

extern int externed_variable;
int *variable_ptr = &externed_variable;

我从前者那里得到的编译器错误是"expression must have a constant value"。我正在使用 MSVC。

全局初始化(更准确地说,具有静态生命周期的变量初始化)需要整数常量,因为它们是在加载时完成的。

所有全局变量通常都粘合在一起成为一个片段,并从二进制图像中一次性全部初始化。仅当您为 C 提供整型常量而不是变量引用时才能这样做。

要求这个的标准规则是6.7.9p4:

All the expressions in an initializer for an object that has static or thread storage duration shall be constant expressions or string literals.

"expression must have a constant value"

正如错误所说,当你初始化一个变量时,它应该是常量。

在这种情况下,

extern int externed_variable;
int variable = externed_variable;

您正在使用 "variable" 进行初始化,并且变量获取值 运行 次。

但是当你这样做时:

extern int externed_variable;
int *variable_ptr = &externed_variable;

您正在分配地址,全局变量的地址是在编译时决定的,因此是常量。 并且您可以初始化一个具有常量值的变量。

所以回答你,因为全局变量的地址是在编译期间分配的并且是常量,你不会出错!