无法将变量分配给 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;
您正在分配地址,全局变量的地址是在编译时决定的,因此是常量。
并且您可以初始化一个具有常量值的变量。
所以回答你,因为全局变量的地址是在编译期间分配的并且是常量,你不会出错!
为什么这不起作用
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;
您正在分配地址,全局变量的地址是在编译时决定的,因此是常量。 并且您可以初始化一个具有常量值的变量。
所以回答你,因为全局变量的地址是在编译期间分配的并且是常量,你不会出错!