요즘은 Effective C++, Effective STL을 보고 있습니다.
그러면서 C++ 표준안도 보게 되고, 관련 문서들도 보고 있죠.
그러면서 제가 알고 있던 C++에 대한 것이 상당히 피상적이었구나
하는 것도 많이 느꼈고요.
다만 한 가지 의문이 생겼던 것이, C++빌더의 경우에 VCL 지원을 위해서
자체적으로 C++ 표준안과는 다르게 언어를 확장한 부분이 많이 있죠.
근데, 빌더 홍보에 보면 (볼랜드 코리아 홈페이지에서)
"볼랜드 C++Builder 컴파일러는 RTL과 STL을 포함한 최신 ANSI/ISO C++ 언어를 지원합니다."
라고 홍보를 하고 있죠.
C의 경우에는 1989년 이후에, 1990, 1999년에 새로 표준안에 갱신되었지만,
C++의 경우에는 1998년 표준안이 처음 표준안이죠.
C/C++ Users Journal에 따르면 빌더가 표준안을 가장 많이 지원하는
컴파일러가 아니라는 점이죠.
1998년 C++ 표준안에서도 지원하지 못하는 부분도 있고, VCL 지원 때문에
충돌하는 부분도 있는거죠.
그냥 맹목적으로 "C++ 빌더는 표준 지원 하고 있어"라고 아는 것보다,
좀 더 언어적인 특징도 알아가야 한다는 거죠.
1999년 C 표준안에 따르면 C에서도 // 코멘트를 지원하도록 되어있죠.
C++ 책마다 나오는 C에서는 /* */ 코멘트만 가능하고, C++에서만 // 코멘트가
가능하다는 것도 C 표준안에 대한 컴파일러 지원이 안되는 것이지
C 언어의 정의에서 불가능한 것이 아니라는 것이죠.
제 요지는 "C++빌더도 컴파일러(툴)의 하나일 뿐이다.
따라서 먼저 언어에 대해서 좀 더 깊이있게 공부하자"는 것입니다.
특히 C++ 소스의 포팅의 경우에는 무척 중요한 문제겠죠.
박지훈.임프 님이 쓰신 글 :
: 김재구님께서 컴파일러 옵션을 찾아서 알려주셨네요.
: 저도 거기까진 잘 몰랐습니다.
: bcc32.exe 안에 그런 새 키워드들이 들어있어서 짐작은 했는데 확증을 못잡아서리...
:
: 그러나저러나...
: Daniel님과 저는 표준에 대해 시각이 좀 다른 것 같습니다.
: 제가 보기엔, 정말로 중요한 것은, 표준단체에서 발표하는 표준안을 따르느냐 아니냐가 아니라,
: 실질적으로 개발자들이 사용하는 코드가 이기종 컴파일러들 사이에 호환이 되느냐 아니냐입니다.
: 그래서 헤더파일을 인클루드하면 된다, 정도로 말씀을 드린 거구요.
:
: 또, ISO이든 ANSI이든 IEEE이든 IETF이든, 이들 단체에서 발표하는 표준안은 엄격하게 말하면
: "표준권고안"이지 실질적인 표준안이 될 수 없다고 생각하고 있습니다.
: IT 업계에서 실질적인 표준은 업계의 대다수가 따라야만 가능한거죠.
: 그리고 그게 표준안의 목적이기도 하구요.
:
: 비슷한 예로, ISO C99보다 ANSI C89가 실질적인 업계의 표준으로 인정받고 있는 것도 그렇고요.
: 일반적으로 C 표준안을 ANSI C라고 하지 ISO C라고 하지는 않잖습니까.
:
: 표준이 그토록 중요했던 시기는 1989년에 ANSI C 표준안이 발표됨으로써 지나갔다고 봅니다.
: 그전까지는 개발자들이 많이 사용하던 코드들이 수없이 호환이 안되었으니까요.
: C++의 경우엔 표준화 이전에도 C의 표준화과정에 있었던 그런 대란은 없었죠.
:
: 단, 비주얼 C++은 별개의 문제죠.
: 개발자들이 실제로 많이 사용하는 코드가 호환이 안되니...
:
: 기럼...
:
:
: Daniel 님이 쓰신 글 :
: : 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++ 컴파일러도 더 업데이트가 필요해 보이네요.
: :
:
|