C 如何从主范围获取 "hide"宏

标签 c inheritance struct scope unions

如果有这样的例程,我希望主应用程序访问...

    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/

相关文章:

c - 如何隐藏我的 Windows Gtk 应用程序的命令提示符?

python - 如何有效地传递参数(python 中的**kwargs)

java - 子类在 Java 中使用哪些数据成员?

c++ - 不完整类型(类)的使用无效

将结构转换为指针

取消 getchar()

c - C 语言的周长计算

c++ - 结构体变量名称的含义是什么?

c - 如果 union 的格式不同,C 如何解释来自 union 的数据?

c - 在c中打印链表