Skip to content

Latest commit

 

History

History
173 lines (135 loc) · 11.3 KB

Basic.md

File metadata and controls

173 lines (135 loc) · 11.3 KB

기본 C++ 프로그래밍 요소 (Basic C++ Programming Elements)

여기서는 단순한 C++ 프로그램 예를 통해 C++ 프로그램의 구성요소를 살펴보고자 한다.

단순한 C++ 프로그램 (Simple C++ 프로그램)

C++ 프로그램을 생성하고 실행시키기 위해서 몇 가지 단계가 필요하다.

첫 번째, C++ 소스 프로그램(소스 코드) 파일을 작성하고 저장한 후 컴파일러(compiler)어셈블러(assembler) 라는 실행파일을 통해 기계어 코드로 변환한다. 그 후 링커(linker) 라는 실행파일을 이용하여 기계어 코드로 부터 실행파일로 생성한다. 보통 링커는 개발 환경에서 소스 프로그램으로 부터 실행파일을 빌드(build)하는 과정 중 컴파일러가 실행된 후에 자동적으로 실행되며 요구되는 라이브러리 함수의 코드가 포함된 최종 실행파일을 생성한다.

C++ 프로그램의 기초를 설명하기 위해서 가장 기본적인 코드로 구성된 C++ 소스 프로그램을 다음과 같이 작성하였다.

/*
  File name: simplePprogram.cc
  Author: Geun-Hyung Kim
  Description:
  두 정수를 키보드로 부터 입력 받아 x, y에 저장한 후 두 수의 합을 구하고 화면에 출력하는 프로그램 
*/

#include <iostream>                            // cin, cout 클래스 선언 내용을 포함
using namespace std;                           // std namespace 사용을 선언
int main(int argc, char const *argv[]) {
  int x, y;
  cout << "두수를 입력하시오: ";  
  cin >> x >> y;                               // x, y를 입력        
  int sum = x + y;                             // 입력한 두 수의 합 계산
  cout << x << " + " << y << " = " <<  sum << endl; // 계산 결과를 화면에 출력
  
  return 0;                     // main() 함수가 성공적으로 종료되었음으로 알림
}

실행결과는 다음과 같다.

두수를 입력하시오: 10 20
10 + 20 = 30

주석문

예제 프로그램에서 /* *///은 주석문(comment)를 나타낼 때 사용된다. 주석문은 프로그램의 실행에 영향을 주지 않으며 프로그래머가 작성한 프로그램 또는 프로그램 코드에 대한 설명을 추가할 때 사용된다. C++에는 주석문을 추가하는 방법이 두 가지가 있다.

첫 째는 두개의 슬래시(/)"//"가 주석문을 나타내며 "//" 시작점 부터 그 줄(행)의 마지막까지 주석문으로 처리한다.

int sum = x + y;                             // 입력한 두 수의 합 계산 

두 번쨰는 여러 줄의 주석문을 만드는 것으로 주석문을 "/"와 "/" 으로 감싼다. C++ 컴파일러는 "/"와 "/" 사이의 모든 내용을 주석문으로 처리하고 직접 기계어로 변환하지 않는다.

/*
  File name: simplePprogram.cc
  Author: Geun-Hyung Kim
  Description:
  두 정수를 키보드로 부터 입력 받아 x, y에 저장한 후 두 수의 합을 구하고 화면에 출력하는 프로그램 
*/

입출력 연산

연산자 ">>"와 "<<"는 입력과 출력을 위해 사용된다. 이것에 대해서는 키보드 입력 및 콘솔 출력에 상세하게 설명하였다.

main() 함수

C++ 프로그램에서 실행 파일의 실행의 시작점은 main 함수이다. C++ 소스 프로그램의 용량이 수십만 라인이 되어도 프로그램은 수행은 main함수에서 부터 시작된다. 그러므로 C++ 프로그램으로 실행파일을 만들기 위해서는 반드시 하나의 main() 함수가 존재하여야 하고 main() 함수가 종료하면 실행 중인 프로그래밍은 종료한다. main() 함수의 표준 형식은 다음과 같다. 함수에 대해서는 이 곳에 설명이 되어 있다.

int main(int argc, char const *argv[])
{
	/* code */
	return 0;
}

C++ 표준에서 정한 main() 함수의 반환 자료형은 int 이다. 첫 줄의 main()함수의 소괄호("(...)") 안의 두 인수는 main() 함수를 호출할 때 (실행 파일을 호출할 때) 전달되는 커멘트 라인(command-line) 인수에 해당한다. 중괄호("{...}") 내부를 함수 몸체(function body) 라 한다. 프로그램은 함수 몸체에서 코드로 작성한다. 함수에서 return 명령을 만나면 함수 내의 코드 실행을 종료한다. 그러므로 main()함수에서 return 문장이 실행되면 프로그램이 종료한다. 간혹 main() 함수의 반환자료형을 void로 선언된 경우가 있는데 이는 C++ 표준은 아니다. 또한 main() 함수를 작성할 때 return 문장이 생략된 경우가 있는데 이는 시스템에서 main()함수가 종료할 때 다음 문장이 자동 실행된다.

return 0 

변수 선언

C++ 프로그램이 실행 중에 프로그램 상태와 같은 데이터를 저장하기 위해서 컴퓨터 메모리에 저장 공간을 할당하여야 한다. 메모리에 저장 공간을 할당하는 것을 변수 선언 이라 한다. 앞의 프로그램 예에는 3 개의 정수를 저장할 변수 x, y, sum을 선언하였다. C++ 프로그램에서 변수 선언은 다음과 같은 형식을 취한다.

자료형 변수명;

C++ 프로그램에서 규정하는 자료형에 대해서는 다음에 설명하겠다. 여기서 정수를 저장하는 변수를 선언하여야 하는 것으로 정수를 나타내는 C++ 프로그램의 키워드 중 하나가 int 이다. 그러므로 앞의 프로그램 예에서와 같이 아래와 같이 변수 x, y, sum을 선언하여야 한다.

int x, y;
int sum;

헤더 파일

C++ 프로그램 언어에서 변수, 함수, 클래스 등의 프로그램 요소의 이름과 형태가 먼저 선언되어야 한다. 변수 x에 정수 데이터 10을 저장하기 위해서 다음과 x = 10 같이 대입 연산자를 사용한다. 이처럼 변수 x에 값을 대입하기 위해서는 변수 x의 선언이 선행되어야 한다. 변수, 함수, 객체를 선언하는 것은 프로그램 요소가 어떤 자료형인지, 함수인지, 클래스인지 등의 여부를 컴파일러에 명시적으로 알리는 것이다. 대규모의 C++ 프로그램을 작성하기 위해서 여려 개의 소스 파일로 구성되머 각 소스 파일은 독립적인 컴파일 단위로 컴파일된다. 컴파일러는 다른 컴파일 단위에서 선언된 이름은 알지 못한다. 즉 전역 변수, 함수, 클래스의 멤버 함수를 정의하기 위해서 이를 사용하는 소스 파일(.cpp 또는 .cc) 에서 해당 요소의 선언이 제공되어야 하며 이를 사용하는 모든 소스 파일에서 해당 프로그램 요소의 선언이 정확히 동일해야 한다. 선언된 내용과 소스 파일들 간에 일치하지 않는 것이 존재하면 개별 컴파일된 단위들이 하나의 실행파일로 합쳐질 때 오류가 발생하게 된다.

이러한 오류 가능성을 최소화하기 위해서 C++ 헤더 파일을 사용하여 관련 전역변수, 함수, 클래스 등의 선언 내용을 소스 파일에 포함하는 방법을 채택하고 있다. 헤더 파일에서 해당 프로그램 요소를 선언한 후 헤더 파일을 해당 선언 내용이 필요한 모든 소스 파일(.cpp 또는 .cc) 또는 다른 헤더 파일에 #include 지시어를 사용하여 포함한다. #include 지시어는 컴파일 전에 헤더 파일의 복사본을 소스 파일(.cpp 또는 .cc)에 직접 삽입한다.

일반적으로 하나의 프로그램은 복수의 소스 파일로 구성된다. 이 때 복수의 소스 파일에서 동일한 헤더 파일을 포함하는 경우가 일반적이다. 하나의 헤더 파일을 2번 이상 포함되는 경우 변수 선언, 상수, 함수, 클래스 정의가 중복해서 정의하게 되어 에러가 발생한다. 이 경우 프로그램 내에 헤더 파일이 하나만 포함되도록 하는 것이 필요하다.
해더 파일이 종복해서 포함되지 않도록 하기 위해 다음과 같이 #ifndef 매크로를 사용한다.

전처리기(C++ Preprocessor)

전처리기(preprocessor)는 컴파일러가 프로그램을 컴파일하기 직전에 실행되는 별도의 프로그램이다. 전처리기가 실행되면 각 코드 파일에서 #으로 시작해서 줄 바꿈으로 끝나는 지시자(directives)를 탐색한다. 전처리기는 컴파일러가 실행되기 전 단순히 텍스트를 조작하는 치환 역활을 하거나 디버깅에도 도움을 주며 헤더 파일의 중복 포함도 방지하는 기능을 가진다. 앞의 프로그램 코드에는 #include 지시자가 있다. 전처리기가 #include 문장을 만나면 #include 다음에 명시된 파일의 내용을 지시자의 위치에 복사한다. #include 지시자로 헤더파일을 지정하는 방법에는 아래와 같이 < > 또는 " "를 사용하는 방법이 있다.

#include <filename>
#include "filename"

#iclude 지시자의 < > 함께 제공되는 헤더 파일은 C++ 런타임 라이브러리의 헤더 파일로 운영체제의 특별한 위치에 존재한다. " "내에 자신이 적성한 헤더파일을 명시하여 소스파일에 포함한다.

또 다른 단순 프로그램

다음Hello World! 문자열과 영문자 Q와 한글의 을 콘솔화면에 출력하는 프로그램이다. 문자는 영문 알파벳 1 개(요구되는 저장 공간이 1바이트인 경우)에 해당하는 것으로 따음표(` `)를 사용하여 표현하고 문자열은 문자 여러 개(요구되는 저장공간이 2바이트 이상인 경우)에 해당하는 것으로 쌍 따움표("")를 사용하여 표현한다. 한글의 경우 캐릭터 한 개가 두바이트의 코드로 표현되기 때문에 요구되는 저장 공간이 2바이트로 따움표가 아닌 쌍 따움표를 사용하여 표현한다.

/*
  File name: simpleConsoleOut.cc
  Author: Geun-Hyung Kim
  Description:
  콘솔 화면에 Hello World! 문자열을 출력하는 프로그램 
*/

#include <iostream>
using namespace std;

int main(int argc, char const *argv[])
{
	cout << "Hello World!" << endl; // 콘솔 화면에 문자열 출력
									// 문자열을 쌍 따움표(" ") 안에 표현
	cout << 'Q' << endl;			// 콘솔 화면에 문자(영문 알파벳: 1바이트로 표현) 출력 
									// 문자는 따움표(' ') 안에 문자 하나 표현
	cout << "" << endl;            // 한글은 코드가 2바이트로 표현되어 문자열로 고러  

	return 0;
}

알아야 할 내용

  1. C++ 프로그램 구성 요소
  2. main 함수의 의미
  3. 한글을 표현할 때 문자 하나를 저장하기 위해 필요한 저장 공간의 크기
  4. 콘솔 화면에 데이터를 출력하기 위해 필요한 객체 (키보드 입력 및 콘솔 출력 참조)
  5. 전처리기가 하는 일
  6. 헤더 파일이 필요한 이유
  7. 주석의 용도
  8. 변수 선언