숫자 상수를 문자열로 변환해야합니다. 그러나 구문은 매크로 매개 변수에만 유효하기 때문에 #BM
은 오류입니다. 그래서 중간 매크로를 통해 강제로 확장해야합니다. 그리고 당신은뿐만 아니라 그것을 할 수있는 캐릭터 라인 화 매크로있을 수 있습니다
#include <iostream>
#define STRINGIFY_(x) #x
#define STRINGIFY(x) STRINGIFY_(x)
#define STR "SOME_STRING"
#define BM 8
#define S_BM STRINGIFY(BM)
#define NUM_OF_THREADS 8
#define S_NUM_OF_THREADS STRINGIFY(NUM_OF_THREADS)
#define VER_STR STR S_BM S_NUM_OF_THREADS
int main() {
// your code goes here
std::cout << VER_STR;
return 0;
}
당신은 http://ideone.com/cR1KZP
편집에서 행동 위를 볼 수 있습니다
매그너스 호프가 지적한 것처럼, 당신은 캐릭터 라인 화를 호출 할 수 있습니다
#define VER_STR STR STRINGIFY(BM) STRINGIFY(NUM_OF_THREADS)
'# BM'은''BM "'을 제공하지 않으므로 컴파일 오류가 발생합니다. '#'은 함수 스타일 매크로의 매개 변수에서만 사용할 수 있습니다. – Angew
@Angew, fixed. 나는 그것을 쓰는 동안 마음에있는 불완전한 해결책이 있었다. – StoryTeller
완전성을 위해 :'# _def VER_STR STR STRINGIFY (BM) STRINGIFY (NUM_OF_THREADS)'와 함께 중간'S _...'-macros 없이도 작동합니다 : http://ideone.com/hbBQIp –