티스토리 뷰



* 이번에 C++관련 면접을 보게 되면서 다시 한번 C++에 대해서 복습하는 기회를 가지려고 한다. 기본 문법부터 간단한 객체지향 설계까지 훑어보고자 한다.



* 시작하기 전에..

: 먼저 C++에 대해서 다시 공부하기 전에 MacOSX에서 gcc를 기반으로 진행하려고 한다. MacOSX가 아니면 리눅스나 유닉스에도 같이 포함이 되어있을테니 해당 OS에서 작업하거나 GNU의 gcc 컴파일러를 받아도 되고, 다른 컴파일러를 받아서 사용해도 된다. 아래는 GNU gcc 관련 웹사이트이다.


https://gcc.gnu.org/


: MacOSX는 xcode를 먼저 깔아야 gcc가 정상적으로 동작하기 때문에 OSX와 xcode를 최신버전으로 다운로드 받아서 gcc의 동작을 먼저 확인하고 진행하였다.




<그동안 미뤄왔던 OSX의 최신버전으로 업그레이드 중.....>



: OSX에 이어서 xcode도 설치하고 이제 Terminal에서 gcc의 정상 동작을 확인하려고 했지만 실패..ㅠ gcc와 g++를 실행하면 Segment fault: 11이 뜨면서 버전확인 등 아무것도 안된다. 따라서 usr/loca/bin에 있는 gcc는 잠시 다른 이름으로 바꿔두고 gcc의 동작을 확인하였지만..


: 또 실패..ㅠ 구글링 결과 gcc는 libc++로 MacOSX의 라이브러리르 사용해서 기본 입출력 include에 문제가 있나보다. 그런데 Mac에서 libstdc++로 컴파일하려면 g++로 컴파일하면 정상 동작 하는 것을 확인하고 g++로 정상 동작 확인하였다. 이렇게 개발환경을 구축하는 것이 실제 개발하는 것보다도 더 에너지를 소모하는 경우가 태반이다. 항상 개발환경 구축은 포기하지 말고 잘하는 것이 중요하다..




* Hello World

: 프로그래밍 언어의 시작은 언제나 Hello World이므로 이것만 C++에서 먼저 살펴보자.


#include <iostream>

int main(int argc, char* argv[]) {
    std::cout << "Hello World" << std::endl;

    return 0;
}


: 위의 소스를 줄별로 분석해보면 아래와 같이 볼 수 있다.


  • #include <iostream> : iostream이라는 라이브러리/모듈을 사용하기 위하여 불러온다. #include는 전처리 대상으로 컴파일 단계에서 오류가 있는지, 라이브러리가 있는지, 파일이 있는지 점검한다.
  • int main(int argc, char* argv[]) { : main() 함수는 C++의 컴파일 결과로 실행파일/바이너리 파일이 생겼을 때 처음으로 실행되는 함수로 실행 커맨드 라인에 추가 파라미터를 더하는 경우 argc와 argv에 해당 정보가 입력된다. argc는 파라미터의 수, argv는 각 파라미터 정보가 들어있다.
  • std::cout << "Hello World" << std::endl; : 출력하는 부분으로 std는 iostream 라이브러리의 기본 네임스페이스로 std 네임스페이스 안에 cout이라는 객체를 대상으로 << operator를 실행한다. 입력 값은 "Hello World"라는 문자열로 cout 객체에서는 화면에 이를 출력해준다. 이어서 std::endl;은 새로운 줄을 나타내는 객체로 Hello World를 찍고 마지막에 새로운 줄을 띄우도록 하고 있는 것이다.
  • return 0; : int main()의 결과 값을 리턴한다. 0은 리턴 값으로 SUCCESS를 의미하여 정상 종료 코드 값을 리턴하는 것이다.


: 위의 소스를 아래와 같이 컴파일 하면 실행 파일이 hello_world로 나오며, 이것을 실행하면 Hello World를 출력하는 것을 확인할 수 있다.


g++ hello_world.cpp -o hello_world


: 그리고 실행결과는 아래와 같이 나왔다.





: 이제서야 잘 동작한다. 이제 다음은 변수형과 기본 함수들에 대해서 후딱 살펴보고 바로 그 다음에 클래스와 객체지향 설계로 넘어가도록 할 예정이다.


끝.


- 다음편

2016/05/10 - [C++ 기본] 클래스와 상속, friend, virtual, template 키워드 등

2016/05/13 - [C++ 응용] 퀵, 머지, 힙, 버블, 선택, 삽입 정렬 알고리즘 구현

2016/05/19 - [C++ 기본] 변수형과 기본 자료 구조(vector, map, set)



공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함