iso646.h를 include하면 macro처럼 처리되는거고,
실제 ISO/IEC 14882-1998 : Programming Language C++ 표준안에서는
not_eq 같은 대체표기 token이 내장 keyword라는거죠.
가령 C++ Builder에서는 iso646.h를 include하지 않으면
not_eq 같은 것을 변수명으로 사용할 수 있지만,
C++ 표준안에 따르면 이것들은 keyword라서 변수명으로 사용할 수 없잖아요.
현재 GCC 3.2랑 CodeWarrior Professional 7.0 for Windows에서는
헤더 파일이 필요없이 키워드로 처리가 됩니다.
빌더에 포함되어 있는 C++ 컴파일러도 더 업데이트가 필요해 보이네요.
박지훈.임프 님이 쓰신 글 :
: 아래 패패루님 말씀처럼, C++Builder 6에서는 not_eq 등을 제외하면 다 컴파일됩니다.
: 간단히 답변을 드리면, iso646.h나 ciso646.h 헤더파일을 인클루드하면 됩니다.
:
: iso646.h와 ciso646.h 헤더파일은 각각 C와 C++ 표준 헤더파일이고, ciso646.h 헤더는 간단히
: iso646.h 헤더를 포함하는 역할만 합니다. 이 파일들을 보면 not_eq가 != 로 디파인되어 있습니다.
:
: Daniel님께서 allternate punctuation token라고 말씀하셨는데, 간단히 말해서 '대체표기법'이라고
: 생각하시면 됩니다. 이런 대체표기법은, ANSI에서 ISO로 C 표준이 넘어가면서 아스키코드의 문제점
: 때문에 필요성이 대두된 것입니다.
:
: 보통 프로그래밍 언어의 소스코드는 7비트 아스키코드로 되어있는데, 이 7비트 아스키코드의
: 몇개 문자는 유럽언어권의 언어마다 글자가 다릅니다. 그중 대표적인 것이 다음의 문자들입니다.
: # $ @ [ \ ] ^ ` { | } ~
:
: 이중 상당수가 C/C++ 언어에서 중요한 언어 요소로서 사용되는 것이죠.
: 이넘들이 유럽언어중 몇개국어에서는 이상한 다른 문자로 나타나기 때문에
: 그래서 이 문자들을 대체해서 표기할 필요가 있어서 ISO 646 표준이 만들어졌습니다.
:
: 자세한 내용은 다음 링크를 참고하시구요.
:
http://czyborra.com/charsets/iso646.html
:
: 어쨌든... 우리같이 아예 7비트로는 아무것도 표기가 안되는 아시아권과는 아무런 상관이 없는
: 표준입니다. 영어권이 아닌 유럽넘들을 위한 거죠.
:
: 물론 gcc에도 이 헤더파일들이 있습니다.
: gcc에서 명시적인 인클루드 없이 컴파일이 된다면, 아마도 기본으로 인클루드되는 모양이네요.
:
: 그럼...
:
: