학습 개요
- C++ 프로그래밍 언어의 기본적인 형식에 대하여 학습
- 프로그램을 구성하는 소스 파일의 종류와 선행 처리, 명칭 공간, main 함수 등 기초적인 C++ 프로그램을 작성하는 방법 알 수 있게 됨
학습 목표d
- C++ 프로그램을 구성하는 소스 파일의 용도 설명할 수 있음
- 선행 처리, 문장, 함수 등 C++ 언어의 기본 요소들로 구성된 최소한의 프로그램을 작성할 수 있음
- 통합 개발 환경을 통해 프로그램을 작성하고 빌드하여 실행 프로그램을 만들 수 있음
주요 용어
- 소스 파일
- 프로그래밍 언어의 문법에 따라 작성된 프로그램을 저장하고 있는 파일
- 헤더 파일
- 여러 소스 파일에 공통적으로 선언되는 내용을 담고 있는 파일로 그 헤더 파일의 내용이 필요한 소스 프로그램 파일에 삽입 된 후 컴파일 됨
- 빌드(build)
- 프로그램의 소스 파일을 실행 가능한 프로그램 파일로 변환하는 것을 의미함
- 컴파일이 필요한 소스 파일들을 컴파일하고, 그 결과와 라이브러리 등을 링크하는 처리가 이루어짐
- 통합 개발 환경(integrated development environment, IDE)
- 컴퓨터 프로그램을 만드는데 필요한 소스 파일 편집기, 컴파일러, 링커, 디버깅 도구 등 소프트웨어 개발에 필요한 도구를 모아 놓은 소프트웨어임
- 선행 처리기 지시어(preprocessor directives)
- C++ 프로그램을 컴파일하기 전에 소스 프로그램을 가공하여 컴파일러가 실제로 번역할 소스 프로그램을 만드는 선행 처리를 지시하는 명령어
- 스트림(stream)
- 시간에 따라 순서대로 입력되거나 출력 되는 일련의 데이터
- 백색 공백 문자(whitespace character)
- 컴퓨터에서 수평 또는 수직 방향의 공간을 표현하는 문자로 공백 문자, 탭, 새줄 문자 등이 이에 해당 됨
- 명칭 공간(name space)
- 특정한 명칭들이 인식 되는 프로그램의 부분
- 다른 영역에 선언된 명칭과 무관하게 명칭 공간 내에서 자유롭게 명칭을 선언하여 사용할 수 있게 함
강의록
C++ 언어의 개요
C++언어
- 1979년 Bell 연구소의 Bjarne Stroustrup이 C 언어를 확장하여 만든 프로그래밍 언어
- C with Classes
- 주요 확장 내용
- 객체 지향 프로그래밍
- 클래스, 상속, 다형성, 동적 바인딩 등
- 일반화 프로그래밍
- 템플릿
- 예외 처리
- 객체 지향 프로그래밍
C++ 언어의 표준
- 국제 표준화 기구(ISO)의 C++ 표준화 연혁
- 1983년부터 C++라는 이름을 사용함
C++ 프로그램의 작성 및 빌드
C++ 프로그램의 소스 파일
- 소스 프로그램 파일
- 처리하고자 하는 작업을 수행하는 C++ 프로그램 명령어들을 담고 있는 파일
- 파일의 확장자
.cpp
.cxx
.C
- 헤더 파일
- 클래스, 함수의 원형, 매크로, 전역 변수, 상수 등 여러 소스 파일에 공통적으로 선언되는 내용을 담고 있는 파일
- 단독으로 컴파일 되지 않고,
#include
라는 선행 처리기 지시어에 의해 소스 프로그램 파일에 삽입 되어 함께 컴파일 됨 - 확장자
.h
.hpp
C++ 프로그램의 빌드
프로젝트 빌드 과정
- 소스 파일(.cpp) -컴파일(번역)→ 목적 파일(.obj)
- 목적 파일(.obj) +(링크)+ 라이브러리 = 실제 동작 가능한 실행 프로그램 파일(.exe)
필요한 도구
- 통합 개발 환경(IDE)
- 소스 프로그램 및 GUI 등의 편집기
- 컴파일러
- 링커
- 디버깅 도구
- 통합 개발 환경(IDE)
C++ 프로그래밍 첫걸음
C++ 소스 프로그램
FirstStep.cpp
1 2 3 4 5 6 7 8
#include <iostream> int main() { // 표준 출력 스트림으로 문장을 출력함 -> 주석 std::cout << "나의 첫 번째 C++ 프로그램" << std::endl; return 0; }
주석
- C++에서 주석(comment)을 작성하는 방법
/*
와*/
사이에 문장을 작성1 2 3 4 5 6
/* a와 b의 값 중에서 더 큰 값을 출력한다. */ if (a > b) std::cout << a << std::endl; else std::cout << b << std::endl;
//
를 기입하면 그 행의 나머지는 주석임1 2 3 4 5 6
// a와 b의 값 중에서 // 더 큰 값을 출력한다. if (a > b) std::cout << a << std::endl; else std::cout << b << std::endl;
선행 처리
선행 처리의 지시
1 2 3 4 5 6 7 8 9
#include <iostream> // 선행 처리기 지시어 int main() { // 표준 출력 스트림으로 문장을 출력함 std::cout << "나의 첫 번째 C++ 프로그램" << std::endl; return 0; }
#include <iostream>
- 선행 처리기 지시어
선행 처리
- C++ 프로그램을 컴파일하기 전에 소스 프로그램을 가공하여 컴파일러가 실제로 번역할 소스 프로그램을 만드는 것
- 선행 처리기 지시어(preprocessor directives)로 처리를 지시함
- 선행 처리기 지시어는
#
로 시작함 - 선행 처리기 지시어 문장은 한 행에 한 개의 문장 작성함
- 선행 처리기 지시어는
- 대표적인 선행 처리
- 헤더 파일 삽입
#include
1 2 3 4 5 6 7 8 9 10 11 12
#include <iostream> /* "" → 내가 만든 헤더 파일을 include 할 때 <> → 표준 라이브러리에서 제공하는 헤더 파일을 include 할 때 */ int main() { // 표준 출력 스트림으로 문장을 출력함 std::cout << "나의 첫 번째 C++ 프로그램" << std::endl; return 0; }
- 매크로 선언 및 해제
#define
#undef
- 조건부 컴파일
#if
#ifdef
#ifndef
- 헤더 파일 삽입
문장
- C++ 프로그램의 문장
- 하나의 문장은 단어와 연산자, 숫자, 문자, 문자열, 문장 부호, 빈칸 등을 정해진 문법에 따라 나열하여 작성함
문장의 끝에는 세미 콜론(
;
)을 기입해 다음 문장과 구분함1 2
std::cin >> a; aSquare = a * a;
- 블록(block)
- 한 개 이상의 문장을 중괄호(
{}
) 안에 나열하여 묶어 놓은 것 여러 개의 문장을 하나의 문장처럼 취급하거나 함수의 몸체 구성하기 위해 사용 됨
1 2 3 4 5
if (a > b) { auto tmp = a; a = b; b = tmp; }
- 한 개 이상의 문장을 중괄호(
함수
함수의 구성
1 2 3 4 5 6 7 8 9 10
#include <iostream> int main() // 머리부 // 몸체 블록 { // 표준 출력 스트림으로 문장을 출력함 std::cout << "나의 첫 번째 C++ 프로그램" << std::endl; return 0; }
main()
- 프로그램 시작 점
입 출력 스트림
std::out
객체- 표준 출력 스트림 객체
- 데이터를 문자열로 변환하여 출력함
- 출력 연산자(삽입 연산자)
<<
1 2 3
std::cout << "나의 첫 번째 C++ 프로그램"; // "나의 첫 번째 C++ 프로그램"
1 2 3 4 5
int a = 10; std::cout << "a의 값은 "; std::cout << a << "입니다." << std::endl; // "a의 값은 10입니다."
std::cin
객체- 표준 입력 스트림 객체
- 문자열을 입력 변수의 자료형의 값으로 변환하여 입력
- 입력 연산자(추출 연산자)
>>
- 백색 공백 문자(빈칸, 탭, 새줄 문자)는 구분 문자로 취급
1 2 3 4
int a; char str[100]; std::cin >> a >> str; std::cout << "c = " << c << ", str = " << str << std::endl;
- 사용자 입력
10 KNOU Computer Sci
- 입력 결과
a = 10, str = KNOU
명칭 공간
- 명칭 공간
- 특정한 명칭들이 인식 되는 프로그램의 부분
- 다른 영역의 명칭 선언과 무관하게 명칭 공간 내에서 자유롭게 명칭을 선언하여 사용 가능
명칭 공간의 정의
1 2 3
namespace myNSpc { // 명칭 공간의 이름 : myNSpc int count; // 명칭을 선언하는 문장 나열 }
명칭 공간 외부에서는 소속 명칭 공간을 지정해 사용해야 함
1
myNSpc::count = 0;
- 동일한 명칭이라도 서로 다른 명칭 공간에서 정의되었다면 별개의 것으로 구분
- 여러 프로그래머가 작성한 프로그램을 결합해 완성된 프로그램 만들 경우 각자 필요한 명칭을 독립적으로 만들어 사용 가능
- 전역 명칭 공간
- 특정 명칭 공간에 속하지 않는 기본 명칭 공간
- std 명칭 공간
- 표준 C++ 라이브러리의 명칭들이 정의되어 있는 명칭 공간
- 특정한 명칭들이 인식 되는 프로그램의 부분
명칭 공간 사용
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
#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; std::cout << NameSpace2::a << std::endl; std::cout << ::a << std::endl; std::cout << a << std::endl; std::cout << NameSpace1::b << std::endl; return 0; } /* 10 20 30 40 50 */
using
이용한 명칭 공간 사용- 특정 명칭 공간이나 명칭 공간 내의 특정 이름을 자주 사용하는 경우 명칭 공간 지정을 간소화 할 수 있음
std::cout
→cout
1
using namespace std;
1 2
using std::cout; using std::endl;
- 특정 명칭 공간이나 명칭 공간 내의 특정 이름을 자주 사용하는 경우 명칭 공간 지정을 간소화 할 수 있음
명칭 공간 사용
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
#include <iostream> 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; }
FirstStep.cpp
1 2 3 4 5 6 7 8 9
#include <iostream> using namespace std; int main() { // 표준 출력 스트림으로 문장을 출력함 cout << "나의 첫 번째 C++ 프로그램" << endl; return 0; }
실습 가이드
Visual Studio Community 설치
Visual Studio 홈페이지 접속 → Community 2022 선택 → 다운로드
- C++를 사용한 데스크톱 개발 체크 → 설치 → 로그인
새프로젝트 만들기 → 빈 프로젝트
프로젝트 구성 작성 → 만들기
- 프로젝트 이름 작성
- 프로젝트 저장 폴더 지정
- 솔루션(프로젝트를 담는 그릇) 이름 작성
생성된 솔루션, 프로젝트 확인
프로젝트 마우스 우클릭 → 추가 → 새항목
C++ 파일 선택 → 소스 파일명 입력 → 추가
C++ 프로그램의 작성 및 빌드
소스 프로그램 입력
- 파일명 옆
*
표시- 수정된 파일이라는 뜻
- 파일명 옆
상단 창 → 빌드 → FirstSetp 빌드
콘솔 창 로그 확인
- 프로젝트 빌드 성공
프로그램 실행
상단 창 → 디버깅 → 디버깅 시작/디버깅 하지 않고 시작
명령창 확인해 프로그램 실행 확인
연습 문제
헤더 파일에 대한 올바른 설명은? a. 선행 처리기 지시어
#include
에 의해 소스 프로그램 파일에 삽입된다.- 헤더 파일은 클래스, 함수의 원형, 매크로, 전역 변수, 상수 등 여러 소스 파일에 공통적으로 선언되는 내용을 담고 있는 파일임
- 헤더 파일은 단독으로 컴파일 되지 않고,
#include
명령으로 지시 되는 위치에 선행 처리기에 의해 소스 프로그램에 삽입되어 함께 컴파일 됨 - 일반적으로 사용되는 파일 이름의 확장자는
.h
임
다음 중 C++ 프로그램을 실행 가능한 프로그램으로 변환하는 것과 관련한 설명으로 올바른 것은?
a. 통합 개발 환경(IDE)은 소스 프로그램의 편집기, 컴파일러, 링커, 디버깅 도구 등 소프트웨어 개발에 필요한 도구를 통합 제공하는 프로그램이다.
- C++ 문법에 따라 작성한 프로그램을 소스 코드라고 하며, 컴파일러는 이를 목적 코드로 변환하는 역할을 함
- 프로그래머가 작성한 프로그램은 링커(linker)를 이용하여 프로그램에서 사용한 라이브러리의 함수 등과 연결하는 링크 과정을 거쳐 실행 파일이 됨
- 프로그램 개발에 필요한 이러한 도구들을 모아 통합 환경으로 제공하는 프로그램을 통합 개발 환경(IDE)이라고 함
위 지문 중 프로그램에서 (다)의 x에 10을 저장하기 위해 빈칸에 넣을 내용은?
1 2 3 4 5 6 7 8 9 10 11
#include <iostream> namespace A{int x;} // 가 namespace B{int x;} // 나 int x; // 다 int main() { int x; // 라 // __________ = 10; }
a.
::x
main()
함수 내의 지역변수 x가 아닌 전역 명칭 공간을 지정하기 위해서는 ::을 첨부한다.
정리 하기
- C++ 언어는 C 언어에 객체 지향 프로그래밍, 일반화 프로그래밍, 예외 처리 등의 기능을 추가하여 확장된 프로그래밍 언어임
- C++ 프로그램은
.cpp
라는 확장자를 갖는 소스 프로그램 파일과.h
라는 확장자를 갖는 헤더 파일이라는 두 가지 종류의 소스 파일에 작성함 - 선행 처리기 지시어를 이용하여 소스 파일의 컴파일에 앞서 헤더 파일의 삽입, 매크로 선언, 조건부 컴파일 등의 선행 처리를 함
- C++ 프로그램은 함수로 구성되며, 콘솔에서 동작하는 응용 프로그램의 경우 일반적으로
main()
이라는 함수부터 프로그램 실행이 시작됨 - 명칭 공간 이용 시 프로그램을 구성하는 영역 별로 다른 영역과의 충돌 우려 없이 자유롭게 명칭 선언해 사용 가능