다음과 같은 이유가 설명 될 수 있습니까?C++ 번역 단계 혼동
int main() // Tried on several recent C++ '03 compilers.
{
#define FOO L
const wchar_t* const foo = FOO"bar"; // Will error out with something like: "identifier 'L' is undefined."
#undef FOO
}
전 처리가 문자열 리터럴 작업 및 일반 토큰 변환보다 이전 번역 단계에서 수행 된 것으로 생각했습니다.
컴파일러는 더 많거나 적은이보고하지 않을까요 : 누군가가 표준에서 설명을 인용 수 있다면
int main()
{
const wchar_t* const foo = L"bar";
}
그것은 좋은 것입니다. 그것은 다른 것, 그것은 그냥 L
의 모든 FOO
의 교체 후 (의미 끝나는 것을 모르는 않습니다 전에
물론! 감사. 실제로 사전 처리 된 출력을 조사 했어야합니다 ... – blakecl
이 정의와 다음 줄 사이에 빈 줄을 두십시오. 그렇지 않으면 매크로가 계속됩니다. 필자는 과거에 여러 번 사용하여 여러 줄 매크로를 만들었습니다. –
준수 전 처리기가 토큰 기반이므로 적합 전처리 기에서 작동하지 않습니다. 두 개의 토큰을 하나로 결합하는 유일한 방법 (예 :'L'과''bar "')은 연결 연산자 ('##')를 사용하는 것으로 대체 목록의 마지막 토큰으로 사용할 수 없습니다. –