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