2012-09-29 5 views
3

에 #define에 의해 정의 상수를 변환.내가 정의 된 상수를 문자열

위의 scanf 호출에서 사용할 수 있도록 MAX_STR_LEN 숫자를 문자열로 변환하는 데 사용할 수있는 전 처리기 트릭은 무엇입니까? 기본적으로 :

scanf("%" XYZ(MAX_STR_LEN) "s", p_buf); 

XYZ()는 무엇이되어야합니까?

참고 : 물론 "% 100s"을 (를) 직접 할 수도 있지만 그 목적을 상회합니다. #define MAX_STR_LEN_STR "100"을 수행 할 수도 있지만 좀 더 세련된 솔루션을 기대합니다.

+1

'#DEFINE의 F (X) #의 x' 사전 처리가''에 F (푸)' "foo는"이' –

+0

당신은 HTTP에 내 대답을보고 할 수 있습니다합니다 : 결과는 다음과 같습니다 // stackoverflow.com/questions/5256313/cc-macro-string-concatenation/5256500 –

답변

15

사전 처리 연산자 #을 사용하십시오. 이 연산자는 매크로 확장 중에 만 작동하므로 도움이되는 매크로가 필요합니다. 또한 매크로 대체 알고리즘의 고유 한 특성으로 인해 간접 지정 계층이 필요합니다.

#define STRINGIZE_(x) #x 
#define STRINGIZE(x) STRINGIZE_(x) 

scanf("%" STRINGIZE(MAX_STR_LEN) "s", p_buf); 
관련 문제