以下代码是否合法?
int add(int a, int b)
{
return a + b;
}
int myvar = add(1, 2);
int main() { /* ... */ }
Run Code Online (Sandbox Code Playgroud)
为什么或者为什么不?
Lig*_*ica 19
静态初始化程序可以调用函数,只要它们在范围内.
[dcl.decl]
(2003年措辞,8/2):
初始值也可以在声明者中指定 ; 初始化器在8.5和12.6中讨论.
[dcl.init]
(2003年措辞,8.5/2):
命名空间作用域的自动,寄存器,静态和外部变量 可以通过涉及文字和 先前声明的变量和 函数的任意表达式初始化.
(不要被缺少static
关键字所误导,关键字具有各种含义.您的变量myvar
在命名空间范围内声明,因此具有静态存储持续时间.)