작은숲:Sudo위키/C++

큰숲백과, 나무를 보지 말고 큰 숲을 보라.

C++ 은 매우 좋은 프로그래밍 언어입니다. 특수 문자를 사용할 수 없는 환경에서 언급할 때에는 CPP (C Plus Plus) 라고 표기하기도 하는데, 이 표현은 C++ 소스 코드의 확장자로 쓰이기도 합니다. 한국에서는 씨쁠쁠이라고 읽는 사람이 많은데, 드물게 '씨더블플러스'라고 읽는 사람도 존재합니다.

개요

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

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

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

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

그 외

.cpp
.cc

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

Hello, world!

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

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


난독화 버전
//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!를 출력하는 것일 뿐입니다.

도보기

Sn

  1. C언어나 C++에 대해 모르는 사람이 봤을 때 "C가 C +1이랑 같다니 무슨 소리지?" 라고 할 sudo 있지만, C와 C++에서의 '='는 대입 연산자이기 때문에, C라는 변수에다가 C + 1의 값을 집어넣는다고 이해하시면 됩니다.