以下代码是否合法?
int add(int a, int b)
{
return a + b;
}
int myvar = add(1, 2);
int main() { /* ... */ }
为什么,为什么不呢?
答案 0 :(得分:19)
静态初始值设定项可以调用函数,只要它们在范围内。
[dcl.decl]
(2003年措辞,8/2):
也可以指定初始值 在声明者中;初始化者是 在8.5和12.6中讨论过。
[dcl.init]
(2003年措辞,8.5 / 2):
自动,注册,静态,以及 命名空间范围的外部变量 可以任意初始化 表达式涉及文字和 以前声明的变量和 的功能强>
(不要被缺少static
关键字所误导,该关键字具有各种含义。您的变量myvar
在命名空间范围内声明,因此具有静态存储持续时间。)