1 Start C & C++
1.1 필요한 요소
- 에디터 : 코드를 짤려면 당연히 에디터가 준비되어 있어야 한다.
- 컴파일러 : C언어에 의해서 짜여진 코드는 인간이 쉽게 이해할 수 있는 코드이다. 기계는 이 코드를 이해할 수 없으므로, 기계가 이해할 수 있는 기계어로 변경해줘야 한다. 컴파일러는 인간이 인지할 수 있는 C로 작성된 코드를 컴퓨터가 인지 기계어된 실행파일로 만들어준다. 번역기라고 생각하면 된다.
- 디버거 : C언어가 아무리 인간이 이해하기 쉽도록 만들어졌다고는 하지만, 여전히 기계(컴퓨터)의 입장에서 생각을 해야 한다. 그러다 보니 많은 실수가 생길 수 밖에 없다. 어떤 실수는 쉽게 찾아낼 수 있지만 어떤 실수는 찾아내기 매우 어렵다. 디버거를 이용하면, 잘못된 부분을 좀더 쉽게 찾아서 수정할 수 있다.
- Make툴 : 아주 작은 프로그램이 아닌 이상, 관리나 유지보수의 목적으로 여러개의 코드파일로 구성이 된다. make를 이용하면 이들 코드를 좀더 쉽게 유지할 수 있다. 프로젝트 관리를 위한 툴이라고 보면된다.
- 형상관리(:12)도구 : cvs(:12), svn(:12)등으로 공동작업을 할때, 코드 파일이 꼬이지 않도록 도와주며, 버젼을 관리할 수 있도록 해준다. 여기에서는 형상관리툴에 대해서는 다루지 않을 것이다. 아마도 꽤 큰 규모의 프로젝트를 하기전엔 필요없긴 하겠지만, 관심이 있다면 링크를 따라가서 읽어보기 바란다.
1.2 개발 환경 만들기
1.2.1 에디터 준비
1.2.2 컴파일러 준비
최근의 Linux에 설치된 gcc는 최소 7.x에서 8.x 버젼이니 사용하는데 큰 문제가 없을 것이다. 아래와 같은 방법으로 gcc or g++가 설치되어 있는지 확인해 보도록 하자. 만약 gcc가 설치되어 있지 않다면, 배포판에 맞는 패키지 관리자를 통해서 설치해야 한다. 방법은 배포판에 따라서 다르기 때문에 별도로 설명하지 않도록 하겠다. 메뉴얼을 천천히 읽어보기 바란다.
# gcc --version gcc (Ubuntu 7.2.0-8ubuntu3) 7.2.0 Copyright (C) 2002 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# g++ --version g++ (Ubuntu 7.2.0-8ubuntu3) 7.2.0 Copyright (C) 2002 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
1.2.3 첫번째 C 프로그램의 작성
#include <stdio.h> int main(int argc, char **argv) { printf("Hello World\n"); return 0; }
- #include : 외부 함수를 사용하기 위해서 함수가 선언되어 있는 파일을 포함시킬려고 사용한다. stdio.h는 표준입력/표준출력/표준에러와 관련된 함수들이 선언되어 있다.
- main 함수 : 프로그램의 본문이다. 프로그램이 실행되기 위해서는 반드시 하나의 main함수가 포함되어 있어야 한다.
- printf 함수 : 표준출력을위한 함수로 "Hello World\n"를 모니터 화면에 출력한다.
- return : 함수의 결과를 넘겨주기 위해서 사용한다.
# gcc -o hello hello.c // c
hello.c를 컴파일 해서 hello라는 실행파일로 만들어라는 명령이다. 이제 hello를 실행하면 다음과 같이 주어진 일을하는 것을 볼 수 있을 것이다.# g++ -o hello hello.cpp // c++
# ./hello Hello World #현재 디렉토리에서 명령을 찾도록하기 위해서 ./를 이용했다.
1.2.4 C 프로그램의 구조
- 프로그램은 하나 이상의 함수로 이루어진다.
- 반드시 하나의 main함수를 포함해야 한다.
- 함수는 서로 독립적인 관계에 있다.
1.2.4.1 함수
입력 데이터 +--\ /--------------+ | | | | +-----------/ \-----+ 출력결과위의 이미지는 함수의 개념을 전형적으로 설명해주고 있다. 이미 초등학교때 소개된 개념이므로 함수를 이해하는데에는 전혀 문제 없으리라 생각된다.
return type function_name(argument) { // 코드 }
- return type : 출력 데이터의 형(type)를 지정해 준다.
- function_name : 함수의 이름으로 각 함수는 이름으로 구분되며, 이름으로 사용할 수 있다.
- argument(인자) : 함수에 넘겨지는 값이다.
- 함수 코드 : 함수의 본체부분으로 인자를 받아서 연산을 하고 결과값을 되돌려준다.
int plus(int a, int b) { return a+b; }
1.2.4.2 main 함수
#include <stdio.h> int sum(int a, int b) { return a+b; } int main(int argc, char **argv) { int result; result = sum(4, 5); return result; }완전한 프로그램이 되기 위해서 하나의 main함수를 가지고 있으며, main함수는 내부에서 sum이라는 함수를 호출해서 4와 5를 더하고 결과값을 리턴하고 프로그램을 종료한다. 프로그램이 종료되었으면 어떻게 리턴값을 확인할 수 있을까 ? 다음과 같이 쉘에서 확인 가능하다.
# ./sum # echo $? 9echo(1)는 화면에 출력을 하기 위해서 사용하는 쉘내부명령어이다. $?는 가장 최근 실행시킨 프로그램이 리턴한 값이 저장되는 쉘의 특별한 변수다. 어떻게 이런일이 가능한지는 아직은 몰라도 된다. 차차 알아나가게 될 것이다.
1.2.4.3 include
1.2.4.4 주석
#include <stdio.h> /* * 만든사람 : yundream * 하는일 : 두개의 인자를 더한 결과를 리턴한다. * 인자 : int a, int b */ int sum(int a, int b) { return a+b; } // Main 함수 시작 int main(int argc, char **argv) { int result; result = sum(4, 5); // 두개의 인자를 더한다. return result; }주석은 "/* */"과 "//" 두개를 이용해서 작성할 수 있다. "/* */"는 블럭단위의 주석을 만들기 위해서 사용하며, //는 라인단위의 주석을 만들기 위해서 사용한다. 함수 전체에 대한 상세설명등은 /* */를 코드 중간중간 간단한 설명을 위해서 //를 사용한다.
1.3 C 프로그램이 만들어지는 과정
- 소스 코드 생성인간이 이해할 수 있는 언어로 프로그램을 작성한다. 이것을 소스코드라고 하는데, 여기에는 컴퓨터에게 내릴 명령들이 포함되어 있다. 소스코드는 인간이 쉽게 이해할 수 있지만, 컴퓨터는 이해할 수 없기 때문에 컴퓨터가 이해할 수 있도록 번역하는 과정이 필요하다.
- Pre processor컴파일러를 실행시키면 가장 먼저 pre compile를 수행한다. 프로그래머가 생성한 소스코드는 인간이 보다 쉽게 읽을 수 있도록 하기 위해서 include나 매크로등을 이용해서 코드가 축약되어 있다. pre compile는 축약된 내용을 컴파일러가 쉽게 해석할 수 있도록 풀어쓰는 과정이다.
- Assembly 코드의 생성이제 풀어쓴 코드를 가장 원시적인 언어의 형태인 Assembly(:12)코드로 만들어준다. 어셈블리코드는 기계어와 1:1로 대응되기 때문에 일단 어셈블리코드로 성공적으로 만들어낸다면 쉽게 기계어형태로 변환할 수 있다.
- Object 파일의 생성Assembly 코드가 만들어졌다면, 이제 이걸 기계어로 변환한다. 이렇게 해서 만들어진 파일을 object파일이라고 한다.
- linker그러나 object파일이 생겼다고 바로 실행될 수 있는게 아니다. 프로그램으로써 실행하기 위해서는 운영체제가 제공하는 다른 여러가지 객체(기능)들과 연결(link)되어야 한다. link과정을 거치면 비로서 실행가능한 완전한 프로그램이 만들어지게 된다.
'my_lesson > _Linux' 카테고리의 다른 글
Linux - 경로(Path)의 의미와 경로 활용 (1) | 2016.03.17 |
---|---|
Linux - Ubuntu 터미널 단축키 (0) | 2016.03.16 |
Linux - MySQL [Installl, Launching]설치_On Ubuntu (0) | 2016.03.05 |
Linux - ubuntu mysql 설치 및 설정하기. (0) | 2016.02.25 |
Linux - 터미널 환경 웹 브라우저 [w3m] (0) | 2016.02.23 |
댓글