2015-01-13 15 views
0

전처리 중에 매크로가 포함 된 메시지를 인쇄하려면 어떻게합니까?매크로가 포함 된 전 처리기 메시지

예컨대 :

#define MACRO_1 1 
#pragma message ("Date:" __DATE__)   // OK 
#pragma message ("MACRO_1 = " MACRO_1)  // error: pragma message requires parenthesized string 
+0

MACRO_1의 결과가 작동하려면 문자열 ("1")이어야합니다. 당신은'#pragma message ("MACRO_1 ="# MACRO_1 ")을 사용하여 그것을 코드로 문자열화할 수 있습니다. https://gcc.gnu.org/onlinedocs/cpp/Stringification.html – IdeaHat

+0

@IdeaHat - 단일 #을 사용하기 위해 "1"문자열을 사용하려고했지만 동일한 오류가 계속 발생합니다 ... – Pietro

답변

1

당신이 할 일은 확장 후 처리기 MACRO_1을 stringize하는 것입니다. #pragma message()에 # MACRO_1을 삽입 할 수 없습니다. 이 경우 #pragma message() 내에서 전 처리기가 보는 내용은 "# MACRO_1"이고 "1"이 아닙니다. 그러나 SSTRINGIZE (x)를 사용할 때 (아래 예제에서와 같이) 선 처리기가 MACRO_1을 확장 (해당 값을 1로 얻음) 한 다음 문자열로 변환합니다 (문자열로 변환). 마지막으로 #pragma message()의 끝에 "1"이라는 문자열을 얻습니다.

이 코드를 시도하십시오. 의도 한대로 인쇄 해주십시오.

#define MACRO_1 1 
#pragma message ("Date:" __DATE__)   
#define STRINGIZE(x) "MACRO_1 = " #x 
#define SSTRINGIZE(x) STRINGIZE(x) 
#pragma message (SSTRINGIZE(MACRO_1)) 
+1

This '경고 : MACRO_1 = MACRO_1 [-W #pragma-messages]' – Pietro

+1

코드를 검토했는데, 지금 표시된 코드가 제대로 작동 할 것입니다. 희망이 도움이 :) – Aymen