2013-06-09 2 views
6

나는 상태 파일을 작성하여 컴파일러의 사업이나 전처리업자의 영역으로 분할하는 상태 기계를 작성하려고한다. 깊은 순회는 아니며 주석 또는 전처리 지시어 섹션 만 찾고 있습니다. (매크로가 없으며 조건부로 컴파일 된 블록이 없음)전 처리기 지시문을 지정하는 것이 합법적 인 곳은 어디입니까?

주석은 간단하지만 전 처리기 지시문을 지정하는 것이 올바른지 100 % 확신 할 수는 없습니다. 예를 들어, 다음 라인이 합법적입니까?

int i; #include <derp.h> 

일부 특수 문자가 허용되고 다른 문자는 허용되지 않는 특별한 경우가 있습니까?

Google을 (를) 검색 했으므로 답변을 찾지 못했습니다.

모두 C 및 C++에 대해 고의로 또는 의도적으로 태그를 답니다.

+10

당신이, 당신이 정말로 언어에 대한 명확한 문법을 ​​사용한다 파서를 만들려고 노력하는 경우 (즉, 규격 (들)) 오히려 여기에 가벼운 필사자들이 준 응답에 의존하는 것이 아닙니다! –

+0

Google을 사용해 보셨나요? – xaxxon

+3

예, Google을 사용해 봤습니다. 그것은 그 질문에 바로 그렇게 말합니다. – Wug

답변

11

사전 처리기 지정 문은 줄의 첫 번째 공백이 아닌 토큰이면 어디에서나 사용할 수 있습니다. 따라서, 당신은

int i; #define ThisIsntLegal SinceItsNotAtTheStart 

을 쓸 수 없습니다 그러나 이것은 다음과 같습니다

int i; 
#define Woohoo ThisIsLegal 

희망이 도움이!

C11 Standard (N1570, ISO/IEC 9899:201x) (관련 섹션 : s6.10 Prerocessing 지침, 160 페이지)

+0

이 리소스에 대한 링크가 있습니까? 일화는 "컴파일러에게 던져보고 무슨 일을하는지"테스트에서이를 지원하지만 서면으로보고 싶습니다. : D – Wug

+0

@Wug : 위 제시 한 바와 같이 서면으로 이것을 찾을 수있는 곳은 언어 표준 ( –

+1

+1)입니다. 표준 링크를 원한다면 * C11 s6.10 전처리 지시어 *는 – simonc

관련 문제