【问题标题】:C how to "hide" macros from main scopeC如何从主范围“隐藏”宏
【发布时间】:2012-09-02 10:01:34
【问题描述】:

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

    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)

我基本上是在结构中使用联合来“模拟”C 中的 c++ 继承。

【问题讨论】:

  • 你的意思是#undef MACRO_NAME
  • 范围规则不适用于宏。宏可以在源文件中从#define#undefed 或文件末尾的任何位置使用。

标签: c inheritance struct scope unions


【解决方案1】:

您在头文件中发布要在主应用程序中使用的信息。在这个例子中,它可能是:

#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) 中,您定义结构内容和宏,并在您认为合适的时候使用它们,而根本不让它们对主应用程序可用。

【讨论】:

  • 是的!就行了!我打算稍后将它们拆分为包含,所以会解决我自己的问题!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-31
  • 1970-01-01
  • 2013-05-25
  • 1970-01-01
  • 2013-06-25
  • 2013-10-24
相关资源
最近更新 更多