防止在初始化之前使用函数,在C中使用类似构造函数

Her*_*che 3 c optimization constructor initialization function

这是我防止funA,funB,funC等在初始化之前使用的方式

#define INIT_KEY 0xC0DE //any number except 0, is ok

static int initialized=0;

int Init()
{
  //many init task
  initialized=INIT_KEY;
}


int funA()
{
 if (initialized!=INIT_KEY) return 1;
 //..
}

int funB()
{
 if (initialized!=INIT_KEY) return 1;
 //..
}

int funC()
{
 if (initialized!=INIT_KEY) return 1;
 //..
}
Run Code Online (Sandbox Code Playgroud)

这种方法的问题在于,如果在循环内调用其中一些函数,那么再次调用"if(initialized!= INIT_KEY)",尽管没有必要.

这是一个很好的例子,为什么构造函数是有用的哈哈,如果它是一个对象,我会确定它在创建时,初始化被调用,但在C中,我不知道如何做.

欢迎任何其他想法!

Evi*_*ach 5

使用指针功能.

在构造时,将函数指向执行所需初始化的函数,然后更新函数指针以指向执行工作的实际函数.

我已经使用指向类中成员函数的指针数组来完成此操作.该类有一个内部整数,表示它所处对象的状态.整数用于下标成成员函数的指针数组...状态0执行init.状态1,工作,状态2将事情重新设置为状态1.

它干得很干净.