加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 10:17:00 所属栏目:百科 来源:网络整理
导读:这是我防止funA,funB,funC等在初始化之前使用的方式 #define INIT_KEY 0xC0DE //any number except 0,is okstatic int initialized=0;int Init(){ //many init task initialized=INIT_KEY;}int funA(){ if (initialized!=INIT_KEY) return 1; //..}int funB(
这是我防止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;
 //..
}

这种方法的问题在于,如果在循环内调用其中一些函数
所以“if(initialized!= INIT_KEY)”再次被调用,并且再次调用,尽管没有必要.

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

欢迎任何其他想法!

解决方法

使用指针功能.

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

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

它干得很干净.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读