在C
中,有没有办法确保一个函数只被调用一次而不使用pthread_once
?
以下内容有效C++
但显然无效,C
因为静态变量的初始化必须是常量(因为我解释了编译错误)
// main.c
int func()
{
return 42;
}
int main( int argc, char* argv[] )
{
static int i = func();
return 0;
}
我认为使用逗号运算符可能会解决这个问题,但这也不起作用:
// main.c
int func()
{
return 42;
}
int main( int argc, char* argv[] )
{
static int i = ( func(), 42 );
return 0;
}
编译这两个结果会导致以下编译错误:
> gcc -g main.c
main.c: In function 'main':
main.c:10:18: error: initializer element is not constant
有什么方法可以避免这种情况并确保一个函数只被调用一次(从调用函数范围)而不使用pthread_once
?
具体来说,如果它被调用一次,我不想提前返回func()
func()
,我对只从调用函数范围调用一次的编译时保证感兴趣——即类似于C++
处理上述代码的方式。
(换句话说,上面的代码对C++
编译器是合法的,它确保只调用一次 - 有没有func()
等效的方法来做到这一点?)C
pthread_once
编辑:
我在原始帖子中并没有理想地表达这一点:我正在寻找一个不涉及包装器/帮助器函数或变量的解决方案;即我很想知道语言中是否有一个结构C
允许这种情况的处理方式与它的处理方式相同C++
。jxh 的解决方案最适合,利用gcc
扩展。