FANDOM


Keep cpp


C++ (씨쁠쁠, C plus plus) 은 기능이 엄청나게 많은 괴물같은 프로그래밍 언어입니다. 특수 문자를 사용할 수 없는 환경에서 C++을 언급할 때에는 CPP (C Plus Plus) 라고 표기하기도 하는데, 이 표현은 C++ 소스 코드의 확장자[1]로 쓰이기도 합니다.

C++의 정식 독음은 '씨 플러스 플러스' (/ˈsiː plʌs plʌs/) 이지만 컴퓨터 관련 분야를 알고 있는 대부분의 한국어 사용자들은 '씨쁠쁠'이라는 은어로 부릅니다. 이는 plus라는 단어가 한국어에서 3음절이나 되기에 반복하면 불편하기 때문입니다. 컴퓨터 관련 분야의 덕후나 전문가들을 배려하는 문화가 있는 Lihe 위키 내에서는 이 점 때문에 C++ 뒤에 오는 조사를 모두 '씨쁠쁠'을 기준으로 붙이고 있습니다. 참고로 아주 드물지만 나이 드신 교수님 중에 간혹 C++을 '씨더블플러스'라고 읽는 분도 존재합니다.

개요

C++은 C에서 직접적으로 파생된 언어로, 비야네 스트로브스트룹 (Bjarne Stroustrup) 에 의해 1983년에 발표되었습니다. 원래 이름은 'C with Classes' (클래스가 있는 C) 였지만 1984년에 이름에 증가 연산자를 넣은 'C++'으로 변경했습니다. C에서는 '++'가 원래 값에 1을 더해 저장하는 연산자이기 때문에 C++이라고 하면 C = C + 1과 같습니다.[2] C를 발전시켜 만든 언어인 C++에 잘 어울리는 아주 재미있는 이름입니다.

C와 유사한 듯 하지만 구조적으로 다른 언어에 가깝습니다. C에 각종 개념들을 추가하면서 여러 변형들을 가해서 만들어졌기 때문에 만약 어떤 사람이 C를 잘한다고 해서 그런 사람들이 항상 C++을 잘하는 것은 아닙니다. C를 배운 사람에게 C++ 코드를 짜라고 했더니 C++로 둔갑(?)한 C스러운 코드를 제출했다는 얘기도 있습니다. 반대로 C++을 잘하는 사람이 나중에 C를 배우게 되는 경우에는 C++ 스타일에 익숙해서 비효율적인 C 코드가 나오기도 합니다.

C++은 C에서 제공하던 어셈블리 언어 수준의 기계적 제어를 그대로 할 수 있게 만들어졌으며, 이것 때문에 속도 면에서 매우 강한 언어입니다. 하지만 기능이 많아서 배우는 데에 많은 시간이 걸리며 C++ 관련 책들은 전반적으로 두꺼워서 적절하게 베개로 사용이 가능할 정도입니다. 또한 C++에 대한 기능을 익히는 데 두꺼운 책을 하나 본 다음에 STL에 대한 책을 따로 또 봐야 할 정도로 기능이 많아서 책장이 C++ 책으로 가득 차는 참사도 일어납니다.

C++은 다른 언어에 비해 진입 장벽이 다소 높은 편이며 이 때문에 진입 장벽을 다 넘지 않아서 부실한 코드를 만드는 양산형 인간들이 많이 있습니다. 언어 자체에 기능이 아주 많아서 뭔가 배우는 것이 두려운 언어이기도 하지만, 열심히 공부해서 능력을 갖춘다면 엄청난 프로그램들을 만들 수 있는 유용한 도구입니다. 타 언어에 비해 프로그래머의 능력에 달린 것이 더 많기 때문에, C++ 공부를 하려고 마음먹고 계신다면 정말로 열심히 공부해야 제대로 쓸 수 있을 것입니다.

C++ 공부에 도움이 되는 책들

C++에 대해 아무것도 모르는 상태에서 출발했다면 시중에 판매되고 있는 일반적인 C++ 책[3]들을 여러 권 읽는 것이 가장 좋은 방법일 것입니다. 그리고 그러한 책들을 통해 어느 정도 문법을 익힌 다음에 C++에 관한 유명한 책들을 쭉 읽어보는 것이 도움이 됩니다. 아래의 책들은 유명한 C++ 서적들입니다.

  • The C++ Programming Language (약칭 TC++PL으로, C++의 창시자 비야네 스트로브스트룹이 직접 쓴 고전적인 책입니다. 아무것도 모르는 초보 상태에서 보기에는 어렵지만 C++의 기초를 어느 정도 알게 된 다음에 보면 많은 도움이 됩니다.)
  • Programming: Principles and Practice Using C++ (이 책 역시 TC++PL과 마찬가지로 C++의 창시자가 직접 쓴 책입니다. 그러나 이 책은 C++이라는 언어 자체보다는 '프로그래밍'을 어떻게 하는 것인가를 가르쳐주는 책이며 C++이라는 도구를 가지고 무엇을 어떻게 해야 하는지 막막한 분이 보시면 많은 도움이 됩니다. 내용은 대충 컴퓨터 과학 / 컴퓨터 공학과 1학년 강의 정도의 수준입니다.)

만약 C++을 공부하기 이전에 C를 먼저 배워서 어느 정도 다룰 줄 아신다면 기초적인 입문서를 한 권만 보고 나서 위에 추천한 책들을 보셔도 좋습니다.

여기에서 설명하는 방법은 결국에는 여러분이 C++에 대한 기본적인 것들을 다 익혀서 적어도 문법이나 언어 구조 자체에서 부족한 부분이 없도록 하는 방법인 것이며, 어디까지나 이는 'C++을 공부하는 방법'이라고 할 수 있습니다. 그렇지만 C++은 하나의 프로그래밍 언어이며, 이는 프로그래밍을 위한 도구에 지나지 않는다는 점을 간과해서는 안됩니다. 물론 이렇게 C++을 잘 익혀놓으면 프로그래밍 자체에 대한 공부를 하는 과정에서 C++을 주 언어로 삼는 여러 교재들을 쉽게 볼 수 있으니 큰 도움이 되긴 합니다.

Hello, world!

일반적인 버전
#include <iostream>
int main()
{
    std::cout << "Hello, world!" << std::endl;
    return 0;
} 

가장 많이 소개되는 Hello, world 예제입니다. 책에 따라 using namespace std; 를 더 붙이기도 하는데, 그것은 사용할 네임스페이스를 지정해주는 것입니다. 그 문장이 위에 써져 있을 경우 'std::cout'과 'std::endl' 부분은 그냥 'cout', 'endl'로 쓰면 됩니다.


난독화 버전
//mfhw 1.3
//mfhw is 'Mind Fu*k Hello World!'
#define li___he int
#define li____he char
#define mind_f return
#define he_li long int
#define IBM___ std::cout
#define he_li__ unsigned int
#define PC std::endl
#include <iostream>
li___he main()
{
    li____he ____;
    li___he ________________________________ = 9;
    li___he ___________________________________ = 8;
    li___he _______________________________________ = 70;
    li___he ___________ = 31;
    li___he ___________________________ = ________________________________ * ___________________________________;
    li___he ______________ = 22;
    li____he ______;
    li___he _______________________ = 2;
    li___he ______________________________________ = 27;
    li___he _________________________________________ = 4;
    li___he ___________________ = _______________________________________ + ___________;
    he_li __________________________ = 28;
    li___he __________________________________________ = 37;
    li___he __________________________________________________ = 3;
    he_li _____________________________ = 80;
    li____he _____________;
    he_li ________________________ = ______________ * _______________________;
    li____he _______;
    li___he _______________________________ = __________________________ + _____________________________;
    li___he _________________________ = ______________________________________ * _________________________________________;
    li____he __;
    he_li ______________________________ = __________________________________________ * __________________________________________________;
    li___he __________________________________ = 17;
    li___he _______________ = 19;
    he_li__ _____________________ = 6;
    li___he _____ = 7;
    li____he ________;
    li___he ________________________________________ = __________________________________ * _____;
    he_li__ _____________________________________________ = 100;
    li___he _______________________________________________ = 11;
    li___he ____________________________ = _______________ * _____________________;
    li___he _________________ = _____________________________________________ + _______________________________________________;
    he_li__ ____________________________________ = 65;
    li____he ___;
    li___he ___________________________________________________ = 51;
    li____he ____________________;
    he_li__ ______________________________________________ = 18;
    li____he __________;
    li___he ____________________________________________________ = 15;
    li___he _________________________________________________ = 49;
    li____he _;
    li___he ______________________ = ______________________________________________ + ____________________________________________________;
    li____he ________________;
    li___he _____________________________________ = 43;
    li____he ____________;
    li___he ___________________________________________ = ___________________________________________________ + _________________________________________________;
    li___he __________________ = ____________________________________ + _____________________________________;
    ____ = ___________________________;
    _______ = ___________________;
    __ = _________________________;
    ______ = _______________________________;
    _____________ = ______________________________;
    ________ = ________________________;
    __________ = ________________________________________;
    _ = _________________;
    ________________ = ____________________________;
    ___ = __________________;
    ____________ = ___________________________________________;
    ____________________ = ______________________;
    IBM___ << ____ << _______ << __ << ______;
    IBM___ << _____________ << ________;
    IBM___ << " " << __________ << _ << ________________;
    IBM___ << ___ << ____________ << ____________________ << PC;
    mind_f 0;
}

위의 Hello, world 예제는 장난스럽게 만들어진 것입니다. 뭔가 괴이하게 보이지만, 사실 아스키 코드의 값을 하나씩 대입해서 최종적으로 Hello, world!를 출력하는 것일 뿐입니다.

C++의 기능들


그 외

.cpp
.cc

C++ 소스 코드의 확장자는 위의 두 가지가 많이 쓰이는데, 유닉스 계열에서는 cc도 많이 쓰이지만 Microsoft Windows에서는 보통 cpp로 씁니다.

도보기

Sn

  1. C++ 소스 코드의 확장자로는 .cpp 와 .cc 가 있는데, 후자는 주로 유닉스 계열에서 이전부터 많이 썼던 것입니다.
  2. C나 C++에 대해 모르는 사람이 봤을 때 "C가 C + 1이랑 같다니 무슨 소리지?" 라고 할 sudo 있지만 C와 C++에서의 등호 (=) 는 대입 연산자이기 때문에 C라는 변수에다가 C + 1의 값을 집어넣는다고 이해하시면 됩니다.
  3. 시중의 일반적인 C++ 책 중 어느 것을 골라야 하는가에 대한 고민이 드는 분도 있을 것 같습니다. 여기에 대한 답변은 간단한데, 가급적이면 두꺼운 책을 고르는 것이 좋다는 겁니다. 특히 700 페이지도 안되는 책들은 C++의 기초를 제대로 소개하지 않는 것이므로 절대 사지 않으셔야 합니다.

Ad blocker interference detected!


Wikia is a free-to-use site that makes money from advertising. We have a modified experience for viewers using ad blockers

Wikia is not accessible if you’ve made further modifications. Remove the custom ad blocker rule(s) and the page will load as expected.

Also on FANDOM

Random Wiki