2013-07-11 2 views
1

내 C 코드에 두 개의 매크로가있어 특정 변수의 이름을 구성하는 데 도움이됩니다. 예를 들어, 다음을 고려 : 그래서, B_A_object라는 변수를 선언하기 위해 노력하고있어매크로의 결과를 다른 매크로에 전달하는 방법은 무엇입니까?

#define MACROA(name) A_##name 
#define MACROB(name) B_##name 

void *MACROB(MACROA(object)); 

. 그러나이 작동하지 않는 컴파일러 나에게 메시지를 던졌습니다 : 그래서

object.c:27:21: error: a parameter list without types is only allowed in a function definition 
void *MACROB(MACROA(object)); 
        ^
object.c:26:26: note: expanded from macro 'MACROB' 
#define MACROB(name) B_##name 
         ^

를, 그것은 전처리 MACROA(object)의 결과를 참가하지만 B_MACROA(object)을 시도 있도록 그 자체를 표현을 고려 보인다 . 그렇다면 전 처리기가 다른 매크로에 전달 된 매크로의 결과를 고려하도록하려면 어떻게해야합니까?

+0

:

void *MACROB(MACROA(object)); // The original line void *B_MACROA(object); // Becomes this, nothing more to expand 

당신은 이런 식으로 해결할 수 있습니다. – Xaqq

+0

@Xaqq 아니요, 불행히도 저는 두 매크로가 부과하는 명명 규칙을 따라야합니다 ... – LuisABOL

답변

3

연결 연산자가 이상하게 작동합니다. 먼저 연결합니다 나중에 평가 :이 학습/테스트 목적이 아닌 경우, 당신은 당신이 할 수있는 경우를 피하려고한다

#define CONC(a,b) a ## b 
#define MACROA(name) CONC(A_, name) 
#define MACROB(name) CONC(B_, name) 
관련 문제