2012-11-26 1 views
0

C99 표준과 가진 문제는이를 이해하기 :프리 프로세서의 위치 표시기 및 위치 표시기 이외의 토큰?

c99 - 6.10.3.3 
Semantics 
3 

--- (2 문장)

Placemarker preprocessing tokens 특별히 처리하십시오 두 위치 아이콘의 단일 장소 표시 전처리 토큰의 결과 및 연결의 연결 placemarker 이 non-placemarker preprocessing token이면 placemarker 전처리 토큰이됩니다.

결과가 유효한 전처리 토큰이 아닌 경우 동작은 정의되지 않습니다.

나는이 기술 이름에 대해 10 번 이상 읽었지만 여전히 혼란 스럽다.

예제와 약간의 도움이 있으면 도움이 될 것입니다.

답변

2

장소 표시 토큰은 전항 (6.10.3.2)에 정의되어

이 경우 함수와 같은 매크로 교체리스트에 파라미터 바로 선행되거나 ## 전처리 토큰 뒤에 매개 변수는 해당 인수의 사전 처리 토큰 시퀀스로 대체됩니다. 그러나 인수가 사전 처리 토큰으로 구성되어 있지 않으면 매개 변수는 placemarker 사전 처리 토큰 으로 대체됩니다. 145)

그리고 각주 :

145) 장소 표시가 는 번역 상 내에 존재하는 일시적인 실체이기 때문에 전처리 토큰은 구문에 표시되지 않습니다 4.

그리고 인용 한 마지막 줄에 "정의되지 않은 동작"이 없으면 "동작이 정의되지 않았습니다"라고 표시됩니다. 나는 당신이 여기서 어떤 종류의 대답을 찾고 있는지 확신하지 못합니다. 그것은 표준의 저자가 그렇게 결정했기 때문에 그렇게 말한다.

+0

당신이 인용 한 것은 괜찮지 만 제 질문은 명확합니다. placemaker와 non-placemaker 토큰은 무엇입니까? 그것은 단지 다음과 같이 쓰여졌습니다 :''그러나 만약 인자가 전처리 토큰으로 구성되어 있지 않다면, 매개 변수는 대신 placemarker 전처리 토큰으로 대체됩니다. ''하지만 placemaker에 대해서는 아무 것도 말하지 않습니다. – Omkant

+0

''행동은 정의되지 않았습니다''와''정의되지 않은 행동 ''은 다릅니다? – Omkant

+1

우선, "placemarker"가 아니라 "placemaker"입니다. 두 번째로 그게 전부입니다 : 토큰이없는 인수가 확장 된 곳을 표시하는 특별한 토큰. – melpomene