2012-09-09 29 views
1

,如果有這樣的,我想主要的應用程序訪問的例行「隱藏」宏...Ç如何從主要範圍

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.

+1

你的意思是'#undef MACRO_NAME'? – aland

+0

範圍規則不適用於宏。一個宏可以在'#define'的源文件中的任何地方使用,直到它是'#undef'ed或文件的結尾。 – Barmar

回答

3

爲「模仿」 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),定義數據結構的內容和宏,並使用它們,你認爲合適,沒有使他們在提供給主要的應用所有。

+0

是的!那就是訣竅!我打算在晚些時候將它們拆分成包含,這樣可以解決我自己的問題! –