开发平台(Platform): (Ex: Win10, Linux, ...)
无
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
GCC
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
无
问题(Question):
在纯C(目前编译器有支援到C99)的环境下,我试着以下述方式进行资料封装:
void DoorOpen(void) {
// ...
}
typedef struct {
void (*open)(void);
void (*close)(void);
} CAR_DOOR;
CAR_DOOR car_door = {
.open=,DoorOpen
.close=NULL,
}
typedef struct {
CAR_DOOR* door;
CAR_ENGINE* engine;
} CAR;
CAR car = {
.door=&car_door,
.engine=NULL
};
使用时就以下面的方式操作
car.door.open();
car.engine.enable();
优点:
1.使用时感觉比较结构化。
2.如果有另外一个主结构叫home,只要把car跟home放在不同的档案(.h/.c),
DoorOpen这类函式只要宣告成static,命名就可以相同,不用为了取名字烦
恼,或是把函式名字拉得很长。
缺点:
1.写起来有够麻烦。
2.door、engine都必须宣告出来,其他结构的指标才能指向它。
3.如上面例子中,CAR_ENGINE结构或是CAR_DOOR下的close函式我还没想到要怎么实现
前,如果只给NULL,不小心存取到会发生问题。
4.比起直接呼叫函式效率应该会差一些,不过在我的应用上这些差异可以忽略。
请问是不是有什么方法可以改善克服这些缺点,或是有更好的做法写出较具维护性的
code呢?
谢谢大家。
喂入的资料(Input):
无
预期的正确结果(Expected Output):
无
错误结果(Wrong Output):
无
程式码(Code):(请善用置底文网页, 记得排版,禁止使用图档)
无
补充说明(Supplement):
无