2012-09-09 3 views
1

에서 "숨기기"매크로 ...는 C는 어떻게 접근의 주요 응용 프로그램을하려는이 같은 루틴이있는 경우 주요 범위

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'에서 소스 파일 내의 어느 곳에서나 사용될 수 있습니다. – 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

예! 그건 속임수 야! 나중에 그들을 포함 시켜서 나눠서 나름의 문제를 해결할 것입니다! –