728x90
황기태 저자의 명품 C++ Programming 개정판을 읽고 학습한 내용을 정리한 포스트입니다!
https://search.shopping.naver.com/book/catalog/32436115747
1. 프로그래밍과 언어
컴퓨터가 처리할 일련의 작업을 묘사하는 것을 프로그래밍이라 하며, 이 때 사용하는 언어를 프로그래밍 언어라고 하며 아래와 같은 종류가 있다..
- 0과 1만 사용하는 가장 원시적 언어 기계어 => 사람이 작성하기 매우 불편
- ADD, SUB 등 사람이 표현하기 쉬운 니모닉 기호로 일대일 대응 => 어셈블리어
- 사람이 이해하고 표현하기 쉬우면서 다양한 프로그램 구조 및 자료 효율적 표현 => 고급 언어(high level programming language)
- Fortran, c/c++, python ..
기계어와 어셈블리어를 변환하는 프로그램은 어셈블러, 어셈블리어를 고급 언어로 변경하는 프로그램은 컴파일러이다.
즉, 사람이 작성한 언어를 컴파일과정을 통하여 어셈블리어로, 어셈블러를 통해 기계어로 번역하여 cpu로 전달된다.
2. C++ 역사
UNIX를 작성하기 위해 개선된 C언어는 큰 소프트웨어를 개발할 때 프로그램 코드 관리에 어려움이 있었음. 따라서 객체 지향 특성 및 기능을 추가한 C++을 개발하게 되었다.
- C언어의 모든 기능을 가지고 있기 때문에 C 소스 프로그램 조금만 수정하면 C++ 프로그램으로 재사용 가능
- 표준 C++ 규칙에 맞게 작성된 C++ 프로그램은 하드웨어, 운영체제 플랫폼에 상관없이 표준 C++ 컴파일러에 의해 컴파일되고 동일한 실행 결과 보장
- ex) __cedc1이라는 비주얼 c++ 만의 전용 키워드는 다른 컴파일러에 의해서는 컴파일 xxxxx => 비주얼 c++ 도구를 이용하되 표준에 준한다면 다른 컴파일러에도 사용 가능
3. 개발 과정
c++ 소스 프로그램 작성, 컴파일, 링킹 과정을 통해 하나의 실행 파일을 만드는 과정으로 세분화된다.
c++ 소스 프로그램 작성
- 표준 확장자가 cpp인 텍스트 파일
- 대부분의 컴파일러 회사들이 c++ 소스프로그램의 작성 및 편집, 컴파일, 링킹, 실행, 디버깅 등 c++ 프로그램 개발의 모든 단계를 지원하는 통합 개발 환경(Integrated Development Environment = IDE) 제공
컴파일
- 소스 프로그램 작성 완료되었으면 컴파일러로 컴파일한다.
- 문법에 맞게 작성되었는지 검사하고, 기계어 코드로 변환하여 object file을 생성
- 만약, 문법 틀리면 오류 발생
링킹
- object file이 생성되었더라도 바로 실행 불가
- 개발자가 작성한 c++ 프로그램이 표준 c++ 라이브러리나 다른 c++ 프로그램에 있는 함수, 객체, 데이터를 이용하는 경우 => 목적 파일에는 참조 표시만 있고 코드를 포함하지 않음
- 링킹은 어떤 목적 파일이 참조하는 c++ 표준 라이브러리나 다른 목적 파일 속에 있는 함수, 객체, 데이터를 포함하여 실행ㅎ에 필요한 모든 기계어 코드를 확보하여 하나의 실행 파일로 만드는 과정
DLL(Dynamic Linking Library)란 링킹 단계에서 결합하지 않고, 실행 중 필요한 순간에 결합하도록 만들어진 라이브러리이다.
- 실행 파일의 크기를 줄이는 역할
- 여러 응용 프로그램이 실행 중에 공유하는 특징
프로그램 실행과 디버깅
- 링킹의 과정에 의해 생성된 실행파일(exe 파일)은 바로 실행 가능
- 만약 논리적 오류 발생 => 오류 위치 발견 or 원인 찾아 수정하는 과정을 디버깅(debugging)이라 부른다.
- 일반적으로 컴파일러를 공급하는 회사에서 함께 공급
우리는 마이크로소프트의 Visual Studio를 이용하여 프로그램을 개발할 것이다. IDE로서 모두 갖춘 tool이기에 다른 도구 필요 xx 아래 사이트에서 다운로드 하면 된다.
https://visualstudio.microsoft.com/ko/downloads/
728x90
'Programming Language > C++' 카테고리의 다른 글
[C++] 생성자 (1) | 2023.11.27 |
---|---|
[C++] 클래스와 객체 (1) | 2023.11.27 |
[C++] 키보드로 문자열 입력 및 헤더 파일에 관해서 (1) | 2023.11.27 |
[C++] C++ 프로그래밍 기본 (1) | 2023.11.27 |
[C++] 특징과 객체 지향 프로그래밍 (1) | 2023.11.27 |