rein's world

프로그래머에게 배움이란

중요하면서도 좋은 것입니다.

Warning treated as error & STL 에서 트랙백

바로 밑의 글도 읽고나서 읽으시면 됩니다.

  1. Warning을 무시해도 된다는 얘긴 아닙니다. 원글에서 중점을 두고 얘기한건 배열 길이 계산에 관한 문제 — 지극히 C 적인 코드 — 인데 그걸 C++ 차원에서 컴파일하고 / 해석하는건 좀 심하다고 생각해서 글을 썼을 뿐입니다.

그리고 왜 Joel 블로그를 링크해 주셨는지는 이해가 안가는군요. 전 C/C++의 포인터 형 변환에 관한 설명을 한거 뿐입니다.

OS 커널 같이 binary interface가 중요한게 아니면 C++은 충분히 이식성 있는(portable)한 언어이고, 굳이 C 수준 라이브러리에 얽혀있는 글을 쓸 필요는 없다는 의미에서 아랫 글을 작성했습니다.

  1. boost::assignment 라는 아주 훌륭한 대안이 존재합니다. vector를 쓴다면 이런 식의 코드가 가능합니다.
vector<int> v;
v += 1,2,3,4,5,6,7,8,9;

<array>를 쓴다면 좀 더 복잡하지만,

array<int, 3> x;
x = list_of( 1 )( 2)( 3).to_array(x);

같이 인간이 읽기 쉬운 형태로 초기화하는 것을 지원합니다. 그런 의미에서 C++의 vector나 array는 기존 C 형식의 배열이 같은 거의 모든 장점을 가지면서도 C++ 특유의 추상화를 적절히 포함한 툴이라고 생각됩니다. 내가 생각하기에 C와 C++이라는 비슷하면서도 타입 시스템이나 추상화 방식에서 차이를 보이는 언어를 배웠다면, 그 차이를 살려야 혹은 살릴 수 있어야 합니다.

C에서 암시적인 형변환을 이용해서 사용자가 제어할 수 있는게 많은 추상화를 쓸 수 있다면1, C++의 연산자 오버로딩 등을 이용해서 더 쉽게 C++을 살리는 법도 배워야 한다고 혹은 배울줄도 알아야 한다고 생각합니다.


  1. 예를 들어 linux 파일 시스템 코드라거나 네트웍 드라이버 모듈 같은걸 까보면 사실 상의 virtual function을 쓰는걸 볼 수 있다. ↩︎