2011-10-16 4 views
0

NSString 내에서 매크로를 확장하는 방법은 무엇입니까? 당신은 내가 얻을 예측할 수 있듯이NSString 내에서 매크로 확장

#define MAX_MESSAGE_LENGTH 2000 

NSString *alertTxt = @"Your message exceeded MAX_MESSAGE_LENGTH characters"; 

대신 "당신의 메시지가 2000자를 초과"의 "당신의 메시지가 MAX_MESSAGE_LENGTH 문자를 초과": 나는 다음과 같은 코드를 가지고있다. 내 MAX_MESSAGE_LENGTH 문자열을 확장 할 수 있습니까?

+0

Joe의 접근 방식은 훨씬 간단하고 오류를 발생시키지 않는 다양한 매크로 코딩 기술이 있습니다. –

+0

맞습니다. 매크로 확장에 대해 궁금한 생각이 들었습니다. – dmitry747

답변

8

NSStrings는 C 문자열과 동일하게 작동합니다. 나는. 문자열 상수를 서로 옆에 써서 연결할 수 있습니다.

/* nested macro to get the value of the macro, not the macro name */ 
#define MACRO_VALUE_TO_STRING_(m) #m 
#define MACRO_VALUE_TO_STRING(m) MACRO_VALUE_TO_STRING_(m) 

#define MAX_MESSAGE_LENGTH 2000 
NSString *alertTxt = @"Your message exceeded " 
         MACRO_VALUE_TO_STRING(MAX_MESSAGE_LENGTH) 
         " characters"; 
+0

인 매크로를 사용한다고 가정합니다. 나도 몰랐습니다. – JoePasq

+0

좋은 점, 불행히도 URL에서와 같이 //를 포함하는 문자열을 // 포함하는 문자열을 자릅니다. 나머지는 C로 주석 처리됩니다. –

+0

예, 매크로 값을 따옴표로 묶은 문자열로 정의한 다음 다음을 사용하여 건너 뛸 필요가 있다고 생각합니다. 'MACRO_VALUE_TO_STRING'. – Mats

1

이 같은 stringWithFormat:를 사용할 수 있습니다

NSString *alertTxt = [NSString stringWithFormat:@"Your message exceeded %i characters", MAX_MESSAGE_LENGTH];

이 NSLog 같은 자리 %@, %i 등을 사용합니다.

+0

숫자 값이 –