如下代码,第一次调用 fn 时会执行 get_value ,后续调用不会执行: void fn() { static int x = get_value(); // ... } 如果代码里显示调用该函数,编译器可能会优化,在第一次调用前初始化。 但如果通过函数指针动态调用,或者将该函数对外导出,那么每次调用 fn 时是否都要判断一下有没有初始化? 调用, 函数, Static, get_value
op 的例子编译出错,initializer element is not constant 。 不如改成 static int x; static int is_initialized = 0; if (!is_initialized) { x = get_value(); is_initialized = 1; }