我试图让一个函数只被调用一次。但我想保存if (firstTime)
支票。
我在想的是:
while (1)
{
foo();
}
foo()
{
static int test = 1, srand (test);
test++;
}
但我在标准中找不到任何涉及此内容的内容。 所以我不确定,这是未定义的。如果不是这样,将按预期调用srand?如果不是这样的话,那么(作为主要问题)是否可以在翻译时调用功能调用(更像是,表现得好像),就像我在这里一样?
答案 0 :(得分:3)
作为第一个时间标志的选项,您可以使用指向最初设置为第一个时间函数的函数的指针,该指针又将指针设置为实际函数的函数。有一个间接级别,但它消除了一个条件分支。
这个想法的更一般的版本是使用指针作为"状态机",其中每个功能"前进" (设置)指向下一个状态的指针(下一个函数作为一系列函数的一部分)。这对于事件或中断驱动的代码非常方便。我已将此方法用于设备驱动程序和嵌入式代码。
答案 1 :(得分:2)
您的想法可能是使用函数调用作为静态变量的初始化程序,只会在程序启动时调用该函数。
不,这在C中是不可能的,在该上下文中只允许使用常量。在C ++中,这是可能的,并且编译器应用一些秘密的智慧来知道这种初始化的实现顺序。