如果有这样的例程,我希望主应用程序访问...
char* get_widget_name(widget_t* w) {
return name(w);
}
我想“隐藏”以下两个宏,显然是在 get_widget_name 中使用
#define GET_WIDGET(self) (&(self)->base.widget)
#define name(self) (GET_WIDGET(self)->name)
我基本上是在结构中使用 union 来“模拟”C 中的 C++ 继承。
最佳答案
您在头文件中发布要在主应用程序中使用的信息。在这个例子中,它可能是:
#ifndef WIDGET_H_INCLUDED
#define WIDGET_H_INCLUDED
typedef struct widget widget_t;
extern char *get_widget_name(widget_t *w);
#endif /* WIDGET_H_INCLUDED */
然后在实现文件 (widget.c
) 中,您可以定义结构内容和宏,并根据需要使用它们,而无需将它们提供给主应用程序。
关于C 如何从主范围获取 "hide"宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12336409/