我是C的新手。我正在阅读Kernighan& Ritchie发现外部变量只能用常量表达式初始化。为什么会这样?你能解释一下我内心发生的事吗?他们什么时候初始化?为什么我们不能使用之前定义的外部变量初始化外部变量?
答案 0 :(得分:1)
根据 C99标准:第6.7.8节:
具有静态存储持续时间的对象的初始值设定项中的所有表达式都应为常量表达式或字符串文字。
外部变量具有静态存储持续时间,因此必须通过常量表达式或字符串文字进行初始化。
答案 1 :(得分:0)
这是一个链接可能会给你更好的解释。 http://www.geeksforgeeks.org/understanding-extern-keyword-in-c/
他们有一个解释我在下面引用:
extern int var = 0;
int main(void)
{
var = 10;
return 0;
}
分析:猜猜这个程序会起作用吗?好吧,这是另一个 来自C标准的惊喜。他们说..如果变量只是 声明和初始化器也提供该声明, 然后将分配该变量的存储器,即该变量 将被视为已定义。因此,按照C标准,这个 程序将成功编译并运行。
希望这可以提供帮助。
答案 2 :(得分:0)
具有静态存储持续时间的任何对象(例如在函数外部声明的变量或声明为static的函数内的变量)只能使用常量值进行初始化。
这个的基本原因是可执行语句不能放在函数之外。
如果未明确初始化此类对象,则对于算术类型或指针类型的空指针,它们将初始化为零。
常见的实现是将分配给具有静态存储持续时间的对象的值作为数据直接写入可执行映像并加载程序映像。