@ 프로그램 작성과 컴파일 및 링크, 실행 과정

- 에디터(editor) : 편집기를 이용해 소스코드를 작성 (노트패드나, 비주얼 스튜디오 등)
소스 파일(파일명.cpp)

- 컴파일러(compiler) : 컴파일러를 이용해 소스코드를 컴파일하여 목적 코드를 생성
목적 파일(파일명.obj)

- 링커(linker) : 링커를 이용해 목적코드와 라이브러리를 연결 
시스템 내장 라이브러리 + 사용자 작성 라이브러리

- 로더(loader) : 로더를 이용해 라이브러리와 연결된 목적 코드를 실행파일로 생성
            실행 파일(파일명.exe)


1) 소스코드

 - 프로그램을 작성한 코드 : 소스코드(source code) = 원시 코드
 - 소스 코드를 저장한 파일 : 소스 파일
 - 소스 코드는 메모장과 같은 텍스트 편집기나 워드프로세서(텍스트 형식으로 저장, 아래 한글이나 기타 저장하면 한글이 깨지기 때문), 또는 컴파일러 제조사가 제공하는 통합 개발 툴 안에 포함된 소스 편집기 등을 사용하여 작성하고 저장한다.
 - C++ 언어로 작성된 소스 파일은 확장명을 ~.cpp 로 하여 저장한다.

2) 컴파일

- C++소스 코드는 사람이 알수 있지만 컴퓨터의 CPU는 소스 코드의 내용을 알 수 없다.
* 소스 코드는 사람의 입장에서 사람이 쉽게 이해할 수 있는 수준의 언어(=High Level Language, 포트란, 코볼등)로
작성된 프로그램
* 컴퓨터의 CPU가 이해하고 실행시킬 수 있는 수준으로 만들어진 프로그램 = 기계어(Machine Language)
 
- 사람이 이해할 수 있는 수준으로 작성된 소스 코드 프로그램을 컴퓨터의 CPU가 이해하고 실행시킬 수 있는 기계어 수준으로 번역해야 컴퓨터에서 실행될 수 있다.
* 소스 코드를 기계어로 번역하는 작업 = 컴파일(compile) 작업
* 컴퓨터 안에서 "컴파일 작업"을 자동으로 수행하는 컴퓨터 프로그램 : 컴파일러(compiler)

- C++ 컴파일러는 운영체제(OS)에 따라 MS-DOS용, MS-Windows 용, Unix용, Linux용 등으로 구분된다.
- C++ 컴파일러는 C++언어로 작성된 C++소스 파일(~.cpp)을 입력으로 받아들여 소스 코드를 기계어로 번역한 후, 번역된 내용을 목적 파일(~.obj)에 저장시켜 출력한다.

- C++ 컴파일러는 컴파일시 작성된 C++ 소스 코드가 정확한 C++문법 규칙을 지켜 작성되었는지 점검하며, C++문법 규칙을 정확히 지키지 못한 경우는 구문 오류(syntax error)를 발생시킨다.

- C++ 컴파일러는 논리적 오류(1+1=3 인경우 문법은 맞는데 결과가 틀린경우)나 의미적 오류(semantic error)와 같이 구문 오류가 아닌 경우에는 오류를 발견하지 못한다.
* 논리적 오류나 의미적 오류는 프로그램의 실행 과정을 통해서만 발견 할 수 있다.

3) 링크

- 컴파일러에 의해 컴파일된 목적 코드에는 소스 코드에서 사용한 표준 라이브러리 함수들에 대한 코드가 삽입되어 있지 않다.
- 링크(link): 컴파일된 목적 코드에 소스 코드에서 사용한 표준 라이브러리 함수들의 목적 코드 모듈을 연결시키는 작업
             * 컴파일된 목적 코드에 표준 라이브러리 함수의 목적 코드 모듈(~.lib파일)을 연결시키는 프로그램 : 링커(linker)

- 로드(load): 표준 라이브러리 함수의 목적 코드 모듈과 연결된 목적 코드를 컴퓨터에서 실행가능한 절대주소체계를 가지는 실행 프로그램(~.exe파일)으로 만드는 작업.
             * 목적 코드를 컴퓨터에서 실행가능한 절대주소체계를 가지는 실행 프로그램으로 변환하는 프로그램 : 로더(loader)
             * 과거에는 링커와 로더가 별도의 프로그램으로 만들어져 존재했으나 지금은 로더가 링커 안데 포함된 형태로 만들
                어진다.(즉, 링커가 로더의 기능도 가진다)

4) 실행

- 실행 파일:
        * 소스 코드 파일에 대한 컴파일과 링크가 성공적으로 이루어진 후 만들어지는 파일
        * 실행파일의 확장자는 ~.exe 이다.
        * 실행파일은 운영체제 환경에 따라 만들어지는 형태가 달라진다.
               - Unix나 Linux용으로 만들어진 실행파일은 MS-DOS 환경이나 MS-Windows 환경에서 정상적으로 실행되지
                 않는다.
               - MS-DOS용으로 만들어진 실행파일을 MS-Windows 환경에서 실행시키면 DOS창(Command창)이 열리면서
                 실행된다.

5) 디버깅

- 디버그(debug): "버그(오류)를 잡는다"는 의미
- 디버깅(debugging):
   * 오류가 발생했을 때 쉽게 오류를 찾을 수 있거나 소스 코드를 단계별로 실행해 가면서 해당 프로그램에서 사용한 변수들
     을 조사하는 작업
Posted by RoaZium