我知道程序运行时,首先执行main()函数 . 但是什么时候在main()之外声明的全局变量的初始化发生了?我的意思是如果我声明一个这样的变量:
unsigned long current_time = millis();
void main() {
while () {
//some code using the current_time global variable
}
}
这里,全局变量初始化的确切时间很重要 . 请告诉我在这种情况下会发生什么 .
2 回答
既然你没有定义你所说的语言,我认为它是C语言 .
(快速回答:C标准不支持这种初始化;您必须查阅编译器的文档 . )
现在我们知道语言是C,我们可以看到标准对它的看法 .
C99 6.7.8第4段:
新的2011年标准(至少是我的草案)说:
因此,使用函数调用初始化静态对象(例如,诸如
current_time
之类的全局对象)是违反约束的 . 编译器可以拒绝它,或者它可以接受警告,并且如果它提供语言扩展,则执行它喜欢的任何操作 .C标准不允许这种初始化 . 基本上,在
main()
函数开始执行之前,您的代码都不能执行 .显然你的编译器允许它作为扩展(假设你实际编译了这段代码) . 您必须查阅编译器的文档以了解语义是什么 .
(通常
main
被声明为int main(void)
或int main(int argc, char *argv[])
或等效,或者以某种实现定义的方式 . 在许多情况下void main()
表示程序员以他们喜欢的任何方式输入入口点 . 因为你可能使用了一个独立的实现,你应该声明main()
然而编译器的文档告诉你 . )