2014-05-11 3 views
0

나의 이해는 전처리 #define은 어떻게됩니까

#define <identifier> <replacement> 

이의 다음과 같은 우리가 가정하자 교체와 식별자를 대체합니다 :

#define SLOT(a) "1"#a 

void myValue(int value); 
SLOT(myValue(int)); 

나는 #을 의미합니다. 은 문자열 리터럴을 의미합니다. 따라서 매크로 다음에 우리는 가지고 있지 않을 것입니다.

"1""myValue(int)" 

... 본질적으로 두 개의 문자열 리터럴이 연속적으로 있습니다. 전 처리기가 자동으로 두 개의 문자열 리터럴을 다시 연결한다고 추측합니다. 사실입니까? 이 사실에 대한 정보는 어디에서 찾을 수 있습니까?

+0

문자열 리터럴 연결은 C++ 11 표준, 구체적으로 § 2.14.5 [lex.string]의 13 번째 문단에서 다룹니다.이 섹션에서는이 섹션에 대한 자세한 내용과 문자열 리터럴에 대한 자세한 내용을 볼 수 있습니다. – WhozCraig

답변

2

네 이해가 옳다.

  1. # 연산자는 stringizer 연산자입니다.
  2. 0 개 이상의 흰색으로 구분 된 두 개의 문자열 리터럴 공백 문자가 단일 문자열 리터럴로 연결됩니다.
관련 문제