一组松散的变量是比较难追踪的,所以一般采用结构体将其封装起来
struct{
tBoolean logOn;
static enum eLogLevel ouputLevel[NUM_LOG_SUBSYSTEMS];
}sLogStruct;
一般我们会选择直接进行创建,像这样:
static struct sLogStruct gLogData;
但是如果要让C代码看起来更像面向对象,那么这个结构体应该在初始化的时候进行创建,分配内存,并返回给调用函数:
struct sLogStruct* LogInit(){
int i;
sruct sLogStrct *logData = malloc(sizeof(*logData));
logData->FALSE;
for(i = 0; i < NUM_LOG_SUBSYSTEMS; i++){
logData-> outputLevel = eNoLogging;
}
return logData;
}
这样做的好处不单单实现了面向对象,而且还可以在初始化的时候对一些变量进行特殊赋值。当然还需要增加一个方法去释放这个对象,这个时候只需要增加一个函数就可以了。
int LogClose(struct sLogStruct* logData){
if(logData!= NULL){
free(logData);
return 1;
}
return 0;
}
当然一些C面向对象的范式里头会提到将上面Init与Close的函数命名为LogData和_LogData,以更靠近C++语法,但是个人认为对于嵌入式而言,init与close会更好理解。