
해당 포스트는 강의를 수강 후 개인적으로 이해한 부분을 글로 기록하고 해석하기 위한 목적으로 이해한 부분이 틀릴수도 있습니다. 틀린 부분에 대해서는 편하게 지적해 주시면 수정하겠습니다.
1979년 Bell 연구소의 Bjarne Stroustrup이 C 언어를 확장하여 만든 프로그래밍 언어
주요 확장 내용
클래스, 함수의 원형, 매크로, 전역변수, 상수 등 여러 소스 파일에 공통적으로 선언되는 부분을 별도로 작성한 파일#include라는 선행처리기 지시어에 의해 소스 프로그램 파일에 삽입되어 함께 컴파일 컴파일, Compile
소스 파일을 컴퓨터가 해석할 수 있는 명령으로 번역하는 과정목적 파일, Object file
하나의 번역 단위를 컴파일한 결과 만들어지는 목적 코드(Object Code)를 저장하는 파일번역 단위별로 하나씩 만들어진다. 실행 파일
생성된 목적 파일들을 라이브러리를 통해 하나로 연결하여 생성된 파일
목적 파일을 연결하는 과정은 링크라고 한다.
라이브러리, Library
프로그램을 작성할 때 사용할 수 있는 클래스나 값, 함수 등을 모아 놓은 패키지,링크 과정에 필요한 라이브러리는링커라고 한다.
빌드 과정에 필요한 도구
- 소스 프로그램 및 GUI 등의 편집기
- 컴파일러
- 링커
- 디버깅 도구
위와 같은 소프트웨어 개발에 사용되는 여러 도구들을 모아 놓은 환경을 통합 개발 환경 (IDE: Integrated Development Environment)이라고 한다.
C++ 프로그램의 기본적인 구조
주석, Comment
작성 방법
/*
'/*'와 '*/' 사이에 문장을 작성
*/
// '//'를 사용하면 해당 행의 뒤 문자는 주석으로 간주
선행처리
소소 프로그램 컴파일 전 컴파일러가 실제로 번역할 소스 프로그램을 먼저 가공하는 과정
선행처리기 지시어(Preprocessor directives)로 처리를 지시
#으로 시작함대표적인 선행처리
헤더파일 삽입: #include
매크로 선언 및 해제: #defin, #undef
조건부 컴파일: #if, #ifdef, #ifndef
#include <iostream> // 선행처리기 지시어
int main()
{
// 표준 출력 스트림으로 문장을 출력함
std::cout << "Hello world"
<< std:: endl;
return 0;
}
선행처리의 예
헤더파일 삽입

a.cpp에서 a.h라는 헤더 파일을 삽입하기위한 선행 처리가 지시 되어 있고 결과에는 a.h에 작성되어 있는 문장들은 a.cpp에 포함된다.
헤더파일 삽입의 경우 <>를 사용하여 삽입하는 경우 표준 include 경로에 존재하는 파일을 사용하고 ""를 사용하여 삽입하는 경우 절대 경로에 위치한 파일을 찾는다.
문장
; (세미콜론)을 기입하여 다음 문장과 구분 std::cin >> a;
aSquare = a * a;{}안에 나열하여 묶어 놓은 것 if(a > b) {
auto tmp = a
a = b
b = tmp;
}함수, Function
함수의 구성
#include <iostream>
int main()
/*
함수의 머리부
함수가 return하는 값의 자료형과 함수의 이름
main 함수는 프로그램의 시작점
*/
{
/*
몸체 블록
실제로 실행되는 내용이 담겨있는 부분
*/
// 표준 출력 스트림으로 문장을 출력함
std::cout << "Hello world"
<< std:: endl;
return 0;
}
std::cout 객체
표준 출력 스트림 객체
데이터를 문자열로 변환하여 출력함
출력 연산자(삽입 연산자): <<
std::cout << "first step"; // first step
int a = 10;
std::cout << "a의 값은 ";
std::cout << a << "입니다." << std::endl;
/*
출력 결과
a의 값은 10입니다.
*/
std::endl은 end of line의 뜻으로 행이 끝남을 알리는 조작어이고 이후 출력되는 문자는 개행된다.
std::cin 객체
입력 스트림 객체>>빈칸, 탭, 새줄 문자)는 구분 문자로 취급함 int a;
char str[100];
std::cin >> a >> str;
/*
사용자 입력: 10 KNOU Computer Sci.
위의 데이터를 입력 받으면 `KNOU` 사이에 공백으로 구분이 되어 출력 결과는
a = 10, str = 'KNOU'
`KNOU` 뒤의 문장은 입력이 되지 않는다.
*/명칭공간, Namespace
namespace nameSpace {
int count; // 명칭을 선언하는 문장 나열
} namespace nameSpace {
int count; // 명칭을 선언하는 문장 나열
}
nameSpace::count = 0;사용 예
#include <iostream>
namespace NameSpace1 { int a = 10; }
namespace NameSpace2 { int a = 20; }
int a = 30; // 전역 변수
namespace NameSpace1 { int b = 50; }
int main() {
int a = 40; // 지역 변수
std::cout << NameSpace1::a << std::endl;
// 10
std::cout << NameSpace2::a << std::endl;
// 20
std::cout << ::a << std::endl;
// 30, 전역명칭공간
std::cout << a << std::endl;
/* 40, 지역 변수 a가 선언되어 있지 않을 경우 전역 변수 a를 가져온다. */
std::cout << NameSpace1::b << std::endl; // 50
return 0;
}
using을 이용한 명칭공간 사용
using namespace std;
namespace NameSpace1 { int a = 10; }
namespace NameSpace2 { int a = 20; }
int a = 30;
namespace NameSpace1 { int b = 50; }
int main() {
int a = 40;
cout << NameSpace1::a << endl;
cout << NameSpace2::a << endl;
cout << ::a << endl;
cout << a << endl;
cout << NameSpace1::b << endl;
return 0;
}