\u000d
때문에 탈출 코멘트를 종료 \u
이스케이프가 균일하게 대응하는 유니 코드 문자로 변환 하기 전에 프로그램이 토큰 화됩니다. 주석 을 시작 하는 \u0057\u0057
대신 동등하게 사용할 수 있습니다 .//
이것은 IDE의 버그이며 \u000d
주석을 끝내는 것을 분명히하기 위해 줄을 구문 강조 표시해야합니다 .
언어의 디자인 오류이기도합니다. 이제는 수정할 수 없습니다. 그에 의존하는 프로그램이 손상 될 수 있습니다. \u
이스케이프는 "이해되는"문맥 (문자열 리터럴 및 식별자, 다른 곳은 아님)에서만 컴파일러가 해당 유니 코드 문자로 변환하거나 U + 0000–007F 범위의 문자를 생성하는 것이 금지되어야합니다 , 아니면 둘다. 이러한 의미 중 하나가 이스케이프가 유용한 \u000d
경우를 방해하지 않고 이스케이프에 의해 주석이 종료되는 것을 방지했을 것 입니다. 비 라틴 스크립트에서 주석을 인코딩하는 방법으로 주석 내에 이스케이프를 사용 \u
하는 것이 포함됩니다\u
. 텍스트 편집기는 더 넓은 위치를 볼 수 있습니다\u
이스케이프는 컴파일러보다 중요합니다. ( 어쨌든 모든 컨텍스트 \u
에서 이스케이프를 해당 문자로 표시하는 편집기 또는 IDE는 알지 못합니다 .)
C 계열에는 유사한 설계 오류가 있습니다. 1 주석 경계를 결정하기 전에 백 슬래시-줄 바꾸기가 처리됩니다. 예 :
// this is a comment \
this is still in the comment!
나는이 특정 디자인 오류를 만들기가 쉽다는 것을 설명하기 위해 이것을 가져오고, 토큰 화에 대해 생각하고 컴파일러 프로그래머가 생각하는 방식을 파싱하는 데 익숙하다면 오류를 수정하기에 너무 늦을 때까지 오류라는 것을 깨닫지 못합니다. 토큰 화 및 파싱에 대해 기본적으로 공식 문법을 이미 정의한 경우 누군가 문법적인 특수 사례 (예 : 3 부작, 백 슬래시-줄 바꿈, ASCII로 제한되는 소스 파일에서 임의의 유니 코드 문자를 인코딩하는 등 무엇이든 포함)를 작성하는 것이 더 쉽습니다. 토크 나이저 앞에 변형 패스 를 추가 하여 토크 나이저를 재정 의하여 특수한 경우를 사용하는 것이 적절한 곳에주의를 기울이십시오.
1 pedants : 저는 C의이 측면이 100 % 의도적이라는 것을 알고 있습니다. 이론적 근거는 아닙니다. 필자는 이것을 펀치 카드에 임의로 긴 줄로 코드를 기계적으로 적용 할 수 있다는 것을 알고 있습니다. 여전히 잘못된 디자인 결정이었습니다.