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中,我不知道如何做.
欢迎任何其他想法!
使用指针功能.
在构造时,将函数指向执行所需初始化的函数,然后更新函数指针以指向执行工作的实际函数.
我已经使用指向类中成员函数的指针数组来完成此操作.该类有一个内部整数,表示它所处对象的状态.整数用于下标成成员函数的指针数组...状态0执行init.状态1,工作,状态2将事情重新设置为状态1.
它干得很干净.