최신판 |
당신의 편집 |
1번째 줄: |
1번째 줄: |
| {{:시리즈:쉽게 배우는 프로그래밍 입문}} | | {{쉽게 알 수 있다 시리즈|이 문서는 정말 쉽습니다.|문서의 내용이 너무 쉬워서 오늘부터 프로그래밍 할 수 있을 것 같습니다.}} |
| | {{토막글}} |
| | [[분류:컴퓨터_프로그래밍]] |
|
| |
|
| 이번에는 [[C++]]에 대해서 배우실 차례입니다.
| | {{중급 프로그래밍 항목}} |
|
| |
|
| [[C++]]에 대한 설명은 리브레의 C++항목을 보시길 바랍니다.
| |
|
| |
| 본 문서에서는 파이썬과의 차이점을 들면서 C++을 알려드리겠습니다.
| |
|
| |
| == 개발환경 설치 ==
| |
| 본 강좌에서는 [[CodeBlocks]]라는 리눅스, 윈도우, 맥을 다 지원하는 C/C++용 IDE(컴파일러 + 편집기)을 사용할께요
| |
| === 윈도우 ===
| |
| [http://sourceforge.net/projects/codeblocks/files/Binaries/13.12/Windows/codeblocks-13.12mingw-setup-TDM-GCC-481.exe 다운로드 링크] 을 눌러서 CodeBlocks를 설치하시면 됩니다.
| |
| === 리눅스 ===
| |
| ==== 우분투 ====
| |
| sudo apt-get install codeblocks를 입력하여 설치합니다.
| |
| === OSX ===
| |
| [http://www.codeblocks.org/downloads/26 여기]에서 다운 받으면 됩니다.(개발자가 부족해서 16.01은 아직 안 된다고 하네요)
| |
|
| |
| === 코드블럭 실행 ===
| |
| [[파일:codeblocks-1.PNG]]
| |
|
| |
| 실행을 하면 이렇게 창이 뜹니다. 컴파일러를 선택하라는 창이지만 OK버튼을 눌러 다음으로 넘어 간다.
| |
|
| |
| [[파일:codeblocks-2.PNG]]
| |
|
| |
| 다음은 소스파일과 프로젝트 파일 확장자를 코드블럭으로 연결할 것이냐는 질문이다.(C/CPP 코드블럭 프로젝트 파일등)
| |
|
| |
| 다른 컴파일러가 없을 경우 그냥 OK를 누르고, 없을 경우 1번째 체크박스을 선택한 후 OK버튼을 누른다.
| |
|
| |
| [[파일:codeblocks-3.PNG]]
| |
|
| |
| 프로젝트를 생성할 경우 File -> New -> Project를 누르면 된다.
| |
|
| |
| [[파일:codeblocks-4.PNG]]
| |
|
| |
| Console Application을 누르고 OK를 누른다
| |
|
| |
| [[파일:codeblocks-5.PNG]]
| |
|
| |
| Next를 눌러 다음으로 넘어 간다.
| |
|
| |
| [[파일:codeblocks-6.PNG]]
| |
|
| |
| C++을 누르고 Next를 누른다.
| |
|
| |
| [[파일:codeblocks-7.PNG]]
| |
|
| |
| # 프로젝트 이름
| |
| # 프로젝트 폴더가 저장될 위치'''중요'''
| |
| # 실제 프로젝트가 저장될 위치
| |
|
| |
| 처음 만지는 분이 프로젝트 폴더가 저장될 위치를 지정하지 않고 Next를 눌러 꼬이는 경우가 많다. 꼭 파랑색 원이 그려진 버튼을 눌러서 폴더를 정한 다음에 Next를 누른다.
| |
|
| |
|
| |
| [[파일:codeblocks-8.PNG]]
| |
|
| |
| 완료가 되면 다음과 같이 프로젝트와 소스 파일 하나가 생긴다.
| |
|
| |
| == Hello, World! ==
| |
| <syntaxhighlight lang=cpp>
| |
| #include <iostream>
| |
|
| |
| int main(void)
| |
| {
| |
| std::cout << "Hello, World!" << std::endl;
| |
| return 0;
| |
| }
| |
| </syntaxhighlight>
| |
| === 파이썬과의 차이점 ===
| |
|
| |
| 우선 너무 달라서 공통점이 없어 보이기는 하지만 몇가지 공통점이 보인다
| |
| # 뭔가 친숙한 문자열인 "(쌍따옴표)가 보인다
| |
| # 뭔가 int라는 게 보인다.
| |
| 하지만 차이점이 더 많이 보이는데 파이썬과 차이점을 보자면 다음과 같다.
| |
| # 파이썬에서 탭으로 구분했던 함수의 시작과 끝을 {}(중괄호)로 구분한다.
| |
| # 각 명령문이 끝나면 ;을 붙여야 한다.
| |
| # 함수 선언이 '''def'''로 시작하지 않는다.
| |
| 이다.
| |
|
| |
| 우선 파이썬과 달리 C++는 프로그램의 '''시작점'''이라는 것이 필요하다. 파이썬의 경우 시작점이 코드의 첫줄이라면, C++의 프로그램의 시작점은 바로 '''이름이 main인 함수'''이다. 프로그램이 시작되면 main함수이 호출되고 프로그램이 동작한다.
| |
|
| |
| 또한 코드의 첫줄에 #include <iostream>이라는 문장이 보인다. 당장은 정확히 알 필요없이 '''터미널/콘솔에 출력하려면 필요하다'''라는 것만 알면 된다.
| |
|
| |
| 프로그램이 시작되면 main함수가 시작되므로 main함수 안을 보자. 한 문장만이 보인다.
| |
| <syntaxhighlight lang="cpp">
| |
| std::cout<<"Hello, World!"<<std::endl;
| |
| </syntaxhighlight>
| |
| std는 standard의 약자이며, cout은 console output이라는 약자이고. endl는 end line의 약자이다. 즉, std::cout은 표준으로 정해진 콘솔에 출력이라는 것이며, std::endl은 줄을 끝낸다, 즉 다음 줄로 넘어간다는 뜻이 된다.
| |
|
| |
| == 변수==
| |
| C++의 변수와 파이썬의 변수는 그 의미와 사용용도는 같지만, 중요한 차이점이 몇가지 있다
| |
| # C++의 변수는 파이썬의 변수와 달리 '''선언'''이라는 것이 필요하다.
| |
| # C++의 변수는 파이썬의 변수와 달리 한번 정해진 데이터형(변수형)에서 바뀌지 않는다.
| |
| 파이썬의 변수는 다음과 같이 선언하면 되었다.
| |
| <syntaxhighlight lang="python">
| |
| 변수 = 1
| |
| </syntaxhighlight>
| |
| 하지만 C++에서 변수는 다음과 같이 선언한다.
| |
| <syntaxhighlight lang="cpp">
| |
| int var = 1
| |
| </syntaxhighlight>
| |
| 해석을 하자면 다음과 같다.
| |
| '''int라는 데이터 형인 var이라는 변수를 만들고, 1이라는 값을 넣는다.''' 또는 '''var은 1이고, 숫자다.'''<ref>저 숫자다 부분은 생략해서 생각하고 필요할 때 다시 떠올려 봐도 된다.</ref><ref>쉽게 해석했을 때</ref>
| |
| 한편 이렇게 변수의 선언시 정해진 데이터형에서 다른 데이터형으로 중간에 바뀔 수 없다.
| |
|
| |
| === 데이터형 ===
| |
| C++는 컴퓨터와 매우 가까운 언어이다. 따라서 컴퓨터의 환경에 따라서 여러 가지가 바뀔 수 있는데, 데이터형이 특히 그러하다. 우선은 32비트를 기준으로 설명한 뒤, 64비트 CPU와 차이점이 있는 데이터형만 추가로 서술한다.
| |
| ==== 정수형 ====
| |
| 가장 많이 쓰이는 데이터형이다. 정수형이란, 소수점 아랫자리가 없는 데이터형을 말한다. 파이썬에서 정수형은 오직 크기가 하나밖에 없었지만, C++에서는 그 용도에 맞추어 사용하라는 뜻에서 다양한 크기를 가진 정수형이 존재한다.
| |
| {|class='wikitable' style='width:100%;'
| |
| |-
| |
| |style='text-align:center'|데이터형 이름
| |
| |style='text-align:center'|bool
| |
| |style='text-align:center'|char
| |
| |style='text-align:center'|short
| |
| |style='text-align:center'|int
| |
| |style='text-align:center'|long
| |
| |-
| |
| |style='text-align:center'|변수 크기
| |
| |style='text-align:center'|1비트(1바이트)
| |
| |style='text-align:center'|1바이트(8비트)
| |
| |style='text-align:center'|2바이트(16비트)
| |
| |style='text-align:center'|4바이트(32비트)
| |
| |style='text-align:center'|4바이트(32비트)
| |
| |-
| |
| |style='text-align:center'|표현가능 범위
| |
| |style='text-align:center'|false, true
| |
| |style='text-align:center'|-128 ~ 127
| |
| |style='text-align:center'|-32768~32767
| |
| |style='text-align:center'|-2147483648~2147483647
| |
| |style='text-align:center'|-2147483648~2147483647
| |
| |-
| |
| |style='text-align:center'|간단한 뜻
| |
| |style='text-align:center'|진위값
| |
| |style='text-align:center'|문자
| |
| |style='text-align:center'|작은 숫자
| |
| |style='text-align:center'|숫자
| |
| |style='text-align:center'|큰 숫자
| |
| |}
| |
| 이중 long형의 경우 64비트 기계어로 번역될 경우에는 운영체제마다 그 크기가 다른데, 윈도우의 경우에는 4바이트, 리눅스의 경우에는 8바이트이다.
| |
|
| |
| ==== 실수형 ====
| |
| 실수형이란 소수점이 붙은 수를 말한다. 컴퓨터에서 실수를 메모리에 저장할 때는 '''부동 소수점'''표기 방식을 사용한다.
| |
|
| |
| '''부동소수점''' 이란 수학으로 보자면 지수방식으로 실수를 표기하는 것과 같다. 1.123123 x 10^2이런 식으로요, 다만 10^n승이 아니라 2^n으로 표기한다는게 차이점이다.
| |
| {|class='wikitable' style='width:100%;'
| |
| |-
| |
| |style='text-align:center'|변수명
| |
| |style='text-align:center'|float
| |
| |style='text-align:center'|double
| |
| |style='text-align:center'|long double
| |
| |-
| |
| |style='text-align:center'|데이터형 크기
| |
| |style='text-align:center'|4바이트
| |
| |style='text-align:center'|8바이트
| |
| |style='text-align:center'|8바이트 이상
| |
| |-
| |
| |}
| |
| ==== 문자형 ====
| |
| String 형입니다. <code>string a="김바보"</code>이런 식으로 사용할 수 있습니다. 사실 String은 사용자 정의 타입이기 때문에 더 기능이 있는데, 나중에 알아보도록 합시다.
| |
|
| |
| === 형변환 ===
| |
| 형변환(casting)은 다른 데이터형으로 변환하는 것을 말한다.
| |
| ==== 묵시적 형변환 ====
| |
| 묵시적 형변환이란 변수를 사용하여 셈을 할 때, 프로그래머가 코드로 ''이 값을 이 데이터형으로 바꿔라''라고 작성하지 않았지만 컴파일러가 ''이 값을 이 값이란 셈을 하려면 이런 데이터형으로 변환해야 하겠구나''라는 판단을 내리고 데이터형을 바꾸는 것을 말한다.
| |
| 묵시적 형변환은 다음과 같은 우선 순위를 갖는다.
| |
| # double
| |
| # float
| |
| # long
| |
| # int
| |
| 왜 다른 데이터형 bool, char, short은 없는가 하면 이들은 다른 데이터형과 셈을 할 때 int형으로 형변환이 된다.
| |
| ==== 명시적 형변환 ====
| |
| <!--
| |
| 묻지도 따지지도 않고 문법을 배우고 싶은 사람은 [[쉽게 배우는 프로그래밍 입문/C++/문법|문법]]을 읽으면 된다. 만약, 프로그래밍을 C++로 입문하고자 하는 사람이 있다면 [[쉽게 배우는 프로그래밍 입문/C++/따라하기|따라하기]]로. | | 묻지도 따지지도 않고 문법을 배우고 싶은 사람은 [[쉽게 배우는 프로그래밍 입문/C++/문법|문법]]을 읽으면 된다. 만약, 프로그래밍을 C++로 입문하고자 하는 사람이 있다면 [[쉽게 배우는 프로그래밍 입문/C++/따라하기|따라하기]]로. |
| == 이 언어를 배우려는 사람에게 전하는 주의사항 == | | == 이 언어를 배우려는 사람에게 전하는 주의사항 == |
217번째 줄: |
50번째 줄: |
| == <s>예외란 없다</s>Hello, World! == | | == <s>예외란 없다</s>Hello, World! == |
| 빈 프로젝트를 생성한 후 소스(.cpp)파일에 다음 내용을 작성한다. | | 빈 프로젝트를 생성한 후 소스(.cpp)파일에 다음 내용을 작성한다. |
| <syntaxhighlight lang=cpp> | | <source lang=cpp> |
| #include <iostream> | | #include <iostream> |
|
| |
|
225번째 줄: |
58번째 줄: |
| return 0; | | return 0; |
| } | | } |
| </syntaxhighlight> | | </source> |
|
| |
|
|
| |
|
| 혹은 이렇게도 쓸 수 있다. | | 혹은 이렇게도 쓸 수 있다. |
|
| |
|
| <syntaxhighlight lang=cpp> | | <source lang=cpp> |
| #include <iostream> | | #include <iostream> |
| using namespace std; | | using namespace std; |
238번째 줄: |
71번째 줄: |
| return 0; | | return 0; |
| } | | } |
| </syntaxhighlight> | | </source> |
|
| |
|
| 또는 | | 또는 |
|
| |
|
| <syntaxhighlight lang=cpp> | | <source lang=cpp> |
| #include <cstdio> | | #include <cstdio> |
| int main(void) | | int main(void) |
249번째 줄: |
82번째 줄: |
| return 0; | | return 0; |
| } | | } |
| </syntaxhighlight> | | </source> |
|
| |
|
|
| |
|
267번째 줄: |
100번째 줄: |
| 따라서 | | 따라서 |
|
| |
|
| <syntaxhighlight lang=cpp> | | <source lang=cpp> |
| std::cout<<"Hello World"<<std::endl; | | std::cout<<"Hello World"<<std::endl; |
| </syntaxhighlight> | | </source> |
|
| |
|
| 은 다음 문장과 완벽하게 똑같다. | | 은 다음 문장과 완벽하게 똑같다. |
|
| |
|
| <syntaxhighlight lang=cpp> | | <source lang=cpp> |
| std::cout<<"Hello World\n"; | | std::cout<<"Hello World\n"; |
| </syntaxhighlight> | | </source> |
|
| |
|
| 이쯤에서 cout 앞에 쓰인 std라는 것의 정체가 궁금할 것이다. 이것은 이름공간(name space)라는 것인데, 여러분들이 정의한 객체나 함수가 헤더에 존재하는 것과 이름이 중복된다면 곤란해지므로 이것을 방지하기 위해 만들어진 개념이다. | | 이쯤에서 cout 앞에 쓰인 std라는 것의 정체가 궁금할 것이다. 이것은 이름공간(name space)라는 것인데, 여러분들이 정의한 객체나 함수가 헤더에 존재하는 것과 이름이 중복된다면 곤란해지므로 이것을 방지하기 위해 만들어진 개념이다. |
292번째 줄: |
125번째 줄: |
|
| |
|
| == 데이터형 == | | == 데이터형 == |
| | == 배열 == |
| == 제어문 == | | == 제어문 == |
| == 함수 == | | == 함수 == |
310번째 줄: |
144번째 줄: |
| * [[C++/STL|STL]] | | * [[C++/STL|STL]] |
| * [[C++/CLI]] | | * [[C++/CLI]] |
| -->
| | |
| {{각주}} | | {{각주}} |
| [[분류:프로그래밍 시리즈|C++]]
| |
| [[분류:C++]]
| |