(快速答案:C标准不支持这种初始化的,你必须向您的编译器的文档)
现在我们知道语言是C,我们可以看到什么该标准必须对此进行说明。
C99 6.7.8第4段:
所有在一个初始化表达式对于具有静态存储 时间应为常量表达式或字符串文字的对象。
和2011年的新标准(至少我拥有草案)说:
所有对于具有静态 存储时间应是常量表达式或字符串文字的对象的初始化表达式。
因此,使用函数调用初始化静态对象(例如,诸如current_time
之类的全局)是违反约束的。编译器可以拒绝它,或者它可以用警告接受它,并且如果它提供了语言扩展,可以做任何喜欢的事情。
C标准没有说什么时候发生初始化,因为它不允许这种初始化。在main()
函数开始执行之前,基本上没有任何代码可以执行。
显然你的编译器允许这个扩展(假设你已经编译了这段代码)。你将不得不咨询你的编译器的文档来找出它的语义。
(通常main
被声明为int main(void)
或int main(int argc, char *argv[])
或同等学历,或在一些实现定义的方式。在许多情况下void main()
表明谁是学过C从写得不好的书,其中有太多的程序员,但是这由于你的目标是Arduino,你可能使用的是独立实现,你应该声明main()
,但是编译器的实现文档告诉你。)
因此,它可能是有用的知道你在说什么语言... – asawyer 2012-01-03 18:59:21
C languange。更具体地说,我倾向于编程arduino。 – 2012-01-03 21:08:19