我决定用计算得到的和局部静力学进行测试
void g() { std::cout << "init "; }
void f() {
int z = 0;
y: z++;
static int x =
(g(), z == 1 ? ({ goto *&&y; 0; }) : 0);
}
int main() { f(); std::cout << "!"; f(); }
Run Code Online (Sandbox Code Playgroud)
我想看看输出是否是"init init!".但令我惊讶的是,我没有得到那个输出,而是GCC优雅地处理它,在运行时输出:
init terminated by recursive_init_error: exception
Run Code Online (Sandbox Code Playgroud)
那个例外是什么?这是标准的例外吗?C++ 03还是C++ 0x?谢谢你的任何解释.
我正在尝试学习在给定函数中定义静态变量时在c中如何工作。例如,当我编写以下代码时:
#include <stdio.h>
void inc() {
static int c = 0;
c++;
printf("%d\n", c);
}
int main(void) {
inc();
inc();
inc();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
预期的输出显然是:
1
2
3
Run Code Online (Sandbox Code Playgroud)
在第一次调用该函数时,将定义静态变量c并将其值设为0,这是很合理的。它已递增并打印。但是,在第二次询问inc()为什么要保留整数c而不将其设置为零的情况下,即使代码按字面意思说也是如此static int c = 0;。像第一次调用期间一样,编译器中的哪种机制阻止c将其值设置为零?