Cpp Language

FrontPage|FindPage|TitleIndex|RecentChanges| UserPreferences P RSS

FrontPage세개의오렌지에대한사랑 CppLanguage

숫자증가식투표패턴에 따라 페이지이름을 결정합시다. (2003/07/11 ~ 03/11/30)

페이지이름 득표
CeePlusPlus 0
CeePlusPlusLanguage 0
CPlusPlus 2
CPlusPlusLanguage 1
CppLanguage 6
CPPLanguage 0
씨뿔뿔 0

{{|
참고 사항입니다. 영어권 언어 사용자인 경우 읽을때 C plus plus 라고 읽습니다.|}}

PerlLanguage, PythonLanguage, PhpLanguage 등과 비교해보면, 노스모크에서 그냥 C++이라고만 언급되는 경우가 상당히 많습니다. 아샬우발적링크가 용이한 페이지이름을 정해 통일되게 사용한다면 C++에 대한 정보가 정리(?)될 수 있다고 봅니다. 페이지이름이 결정된 후에 해야 할 일이 더 많습니다. :)



1. C++의 소개

1.1. C++ 언어

  • C++ 언어의 개선점
    C++ 는 세 가지 프로그래밍 방식 - 즉 C 의 절차언어 방식과 C에 클래스를 추가함으로써 비로서 실현된 C++의 객체 지향 언어방식, 그리고 C++ 템플릿에 의해 지원되는 일반화 프로그래밍 -을 하나로 결합하고 있다.

  • BjarneStroustrup의 목표
    C와 마찬가지로 벨 연구소에서 탄생한 C++는 벨 연구소의 BjarneStroustrup이 1980년대 초에 개발하였다. 그의 말에 따르면, C++는 그와 그의 동료들이 어셈블리 언어나 C언어, 기타 고수준 언어로 프로그래밍하는 수고를 덜기 위해 만들어졌으며, C++를 만든 주된 목적은 프로그래머들이 보다 쉽고 쾌적하게 유용한 프로그램을 작성할 수 있도록 하기 위한 것이라고 했다.
    쉽고 쾌적함이라..제 개인적인 생각에 더 쉬운것같진 않은데..^^;;

1.2. C++의 특징

  • 큰 기능성 (Greater Functionality)
    • C++에서, 문자 상수의 형은 char이다. C에서는 EOF 같은 에러도 반환해주기 위해 int를 쓴다.
      어? C에는 char가 없었나요?
      C와 C++ 둘다 문자 상수의 형은 char인데요. -_-a --RedPain
      C 표준 라이브러리에 있는 getchar 와 같은 문자 입력용 함수들은 int를 리턴값으로 가집니다. 그 이유는, 버퍼에 아무 문자도 없을 때와 같은 에러 코드를 나타내는 데 리턴값을 함께 사용하기 때문이죠. getchar의 리턴값을 char로 받으면 '입력 에러'와 아스키코드 255번 문자를 구분할 수 없게 됩니다. 반면 C++에서는 예외를 발생시켜서 에러를 나타내고, 또 유니코드 대응 wide-char 타입도 지원하기 때문에 (이 부분은 확실치는 않네요) 문자를 명확하게 char 이라고 사용할 수 있게 되었습니다. 물론 기존 C 표준 라이브러리를 사용하고 예외기능을 disable 시킬 경우엔 이러한 장점을 활용하기 어렵겠지요.
      실험 결과, printf("%d\n", sizeof('a')) 의 결과가 cc main.c 와 같이 컴파일했을 때에는 4, g++ main.cpp 와 같이 했을 때에는 1 이 나오는군요. i386 리눅스 머신에서 컴파일했습니다. 단순한 표준 라이브러리 함수의 스펙 이상의 어떤 의미가 있는 듯 합니다. 이것이 왜 큰 기능성을 제공하는지는 생각해 볼 문제로군요.
      단순히 C++에서 문자 상수를 인식하는 것의 여부겠지요. (함수의 스펙 여부가 아니라) --씨엔
      C언어의 getchar는 int형을 반환하지만 C++의 basic_iostream의 get은 char형을 반환합니다. (C++의 getchar는 여전히 int형을 반환합니다.) 이 것을 큰 기능성이라고 보기는 힘듭니다. getchar가 int형을 반환하던 시절은 시스템의 메모리가 비싼 시절이었기 때문에 반환값을 합쳐 놓은 것에 불과합니다. getchar를 wrapping해서 분리해서 반환하는 함수를 만들면 분리해서 반환이 가능하지요. 이것을 C++의 기능성으로 본다는 것은 잘못된 견해라고 봅니다. wide-char 타입은 지원이 가능합니다. basic_iostream은 템플릿 클래스기 때문이죠. 사람들이 많이 쓰는 iostream과 string은 char형에 맞도록 typedef한 것에 불과합니다. wide-char을 사용할수 있게 되었다고 해서 문자를 명확하게 char라고 사용하게 된것이라고 보기는 힘들지요. C++의 함수들은 여러 문자형을 지원하도록 설계되었는데 특별히 많이 사용되는 char형에 대해서는 typedef한것에 불과합니다. (참고로 w_char형에 대해서도 wstring등의 이름으로 typedef되어 있습니다만 locale 설정 문제와 반환값이 int로 되어있어서 곤란한 부분이 있습니다.) --씨엔

    • C++가 추상적 데이타형을 지원함으로 나타나는 부수효과는 C++의 각 클래스들이 C의 Struct와는 달리, 클래스 자신의 범주와 내부의 개별요소의 범주단위로 접근을 허가하고 거부한다는 것이다.

    • 지역 Struct 명은 외부 시계속에 있는 오브젝트, 함수, enumerator, 또는 형의 이름을 숨긴다. 이것은 Struct명들과 식별자들이 C++내에서 단일 이름의 공간에서 발생하기 때문이다.

    • C++에서 go to문은 명시적인 또는 암시적인 초기자들(즉, 클래스 생성자)을 가진 선언 위를 점프해 넘어 갈 수 없다.

    • C++에서, 분명한 extern이 없는 변수 선언은 그 변수의 정의로 간주해 버린다. 이것은 클래스를 초기화하는 함수를 자동으로 호출하기 위해서 필요하다.

  • 엄격한 형 검사(Stronger Type Checking)
    • C++에서, 선언되지 않은 함수를 이용하는 것은 에러이다.

    • C++에서, 값을 리턴하도록 선언되어 있는 함수가 값을 리턴하지 않으면 에러이다.

    • C++와 ANSI C는 문자배열을 초기화할때 사용하는 스트링 상수의 형을 서로 다르게 해석한다. C++은 문자로 된 스트링 상수를 종료시키는 널 문자를 위한 공간을 제공하지 않기 때문이다.

      프로그래밍언어적인 특성을 봤을 때 CppLanguage는 결코 Strong Typing이 아닙니다. Stronger than C라고 한다면 이해할 수 있습니다. Java마저도 Strong Typing은 아니라는 견해도 있습니다. (사실 객체지향언어의 본질적인 문제이기도 합니다. 타입캐스팅 문제 때문이죠.) -- Selmo

  • 일반화 프로그래밍(Generic Programming)
    • C++에서는 템플릿을 제공해서 일반화 프로그래밍(Generic Programming, 포괄 프로그래밍)을 제공한다.

    • C++에서 템플릿을 가장 잘 활용한 것은 STL(Standard Templete Library)이다. 이것은 표준에 넣기 위한 노력에 의해서 C++은 1998년에 와서야 표준이 완성되게 되었다.
      슬프게도 MS의 툴은 STL의 일부만 지원하며 성능또한 떨어집니다.
      VS.net 2003에 와서 상황은 매우 나아졌습니다. 하지만 버그들이 발견되고 있어서 패치가 나와야 할것 같습니다.--씨엔
      그래서 현수를 포함한 많은 분들이 STLPort등을 사용합니다. STLPort를 설치하시는 것을 강력히 추천합니다. :)

    • C++은 템플릿을 이용하여 자료형에 무관하며 안정적으로 알고리즘을 적용시키게 해주어서 생산성을 향상시킨다.

3. 질문 / 답변

Q. : C++을(를) 어떻게 읽어야 하나요?
A. : 영어권에서는 CPlusPlus 라고 많이 읽고, 우리나라에서는 씨뿔뿔,씨쁠쁠 등의 발음을 선호하기도 합니다. CDoublePlus 라고 읽기도 하더군요.

Q. : C++을(를) 처음 배우려고 하는데 교재 좀 추천해주세요.
A. : Accelerated C++이 좋습니다. C++의 특성들을 통해서 C++의 세계로 바로 들어갑니다.

4. C++ 의 전망

C++ 창시자인 Bijarne Stroustrup이 IEEE에서 C++의 전망에 대해 인터뷰한 내용입니다. 아직도, 이 유명한 인터뷰를 읽지 않으신 분들을 위해서 ;) 학교 다닐때 죽어라 STL외우느라 땀뺐었는데, 미리 이 글을 보았음 자바에 신경썼겠죠. 읽어보면 느껴지겠지만, C++이 증말로 객체지향언어인가, Portability란게 있는가에 대해 익살스럽게 대답하는게 재밌습니다. -- dilbert
한 시대를 풍미했던 유머로 알고 있는데요 :) -- 최종욱
전 만우절마다 보게 되는 글이더군요. -.-;; -- RedPain

Bijarne Stroustrup의 인터뷰 [http]http://www.orton.demon.co.uk/ff/cpp_interview.html
[http]Bijarne Stroustrup의 인터뷰 한글번역 (안종연 씨의 개인 홈페이지 링크)

위 인터뷰는 누군가가 (SomeWaysToSayHelloWorld와 같이) ObjectOrientedProgramming을 비꼬려고 지어낸 글입니다. 실제 인터뷰는 여기 있습니다: http://www.research.att.com/~bs/ieee_interview.html

언제나 궁금했던건데, Bijarne Stroustrup <- 도대체 이건 어떻게 읽어야 되는거죠? -- bab2
저분 홈페이지에 가면 wav 파일인가로 있던 거 같은데 홈페이지가 기억이 안나네요. "뱐"하고 "비얀"의 중간 정도 아닐까요 ^^ --이호재
한글로 쓴다면 비얀 스트라우스트럽 정도? --세벌
한국어로 하면 비아네 스트라우스트럽 이 아닐까 싶습니다. [http]http://www.research.att.com/~bs/bs_faq.html#pronounce -- 쌀밥
지금 웨이브 파일로 들어보니까요.. 비아네 스트럽-스트룹..에 가깝게 들리네요. 맞게 들은건지.. -- Selmo
Bjar-ne Strou-strup 라고 본인이 말했습니다. 성과 이름 각각 2음절에 BJ 둘다 강세가 없다고 합니다. 뱌네 스트로-스트럽 정도가 적당할것 같습니다. -씨엔

Bijarne Stroustrup씨 언제부턴가 Texas A&M University에서 교수하고 있더군요...^^;

See also Wiki:CeePlusPlus


"; if (isset($options[timer])) print $menu.$banner."
".$options[timer]->Write()."
"; else print $menu.$banner."
".$timer; ?> # # ?>