2010-07-16 5 views
14

GCC_PREPROCESSOR_DEFINITIONS (또는 XCode를 사용하는 경우 프리 프로세서 매크로) 아래에 "FOO = bar"매크로를 추가하면 "FOO"의 값에 액세스하는 가장 좋은 방법은 무엇입니까?프리 프로세서 매크로 정의의 값 액세스

현재, 나는 서투른를 사용

#define MACRO_NAME(f) #f 
    #define MACRO_VALUE(f) MACRO_NAME(f) 

    #ifdef FOO 
     NSLog(@"%s", MACRO_VALUE(FOO)); 
    #else 
     NSLog(@"undefined"); 
    #endif 

이 출력됩니다 "바"확실히

, 더 나은/청소기 방법이있을

답변

10

는 당신이 일을하는 방법 (또는 캐릭터 라인 화) 매크로 값 stringize -입니다. 우회는 불가피합니다.

Rob이 연결된 GCC 전 처리기 manual section에서도 언급됩니다.

+0

확인해 주셔서 감사합니다. – Adriaan

2
NSLog(@"%s", #FOO); 
?

Stringification을 참조하십시오. 이미 사용하고있는 기술입니다. 그게 뭐가 잘못 되었 니?

+1

이것은 전처리 후'NSLog (@ "% s", #bar);가 될 것입니다. 매크로 확장을 허용하려면 다른 매크로를 통한 간접 참조가 필요합니다. –

+0

주목하고 동의 함. –

+0

전처리 기 문자열 매크로를 NSString 상수로 바꿀 수 없다는 뜻입니까? (왜냐하면 [NSString stringWithFormat : macroString]을 실행하자마자 이니셜 라이저가 끊어지기 때문입니다.) – zekel

관련 문제