본문 바로가기
프로그래밍/C++

C++ 문법 공부 - 콘솔 응용프로그램 기본 구조

by pentode 2018. 4. 8.

C++ 문법 처음으로 콘솔 응용 프로그램의 구조에 대해서 알아 보겠습니다. Microsoft Visual Studio Community 2017을 사용해서  연습을 해볼 것이므로 프로그램이 설치되어 있지 않다면 "Visual Studio Community 2017 설치하기" 를 참조해서 설치하면 되겠습니다. 바로 GUI 프로그램을 해볼까 하는 생각도 해봤지만 문법부터 배워야 하는 상황이고, 당장 뭘 만들어야 하는것도 아니기 때문에 콘솔 응용프로그램으로 시작해도 문제가 없을것 같습니다. 콘솔 응용프로그램은 GUI 없이 명령창에서 실행이 되는 프로그램 입니다.

 

 

1. 프로젝트를 생성합니다.

 

프로젝트의 생성 정보는 다음과 같습니다. 콘솔 응용 프로젝트 생성하는 방법도 위의 설치하기 참조글 아래쪽에 나와 있습니다. 그걸 참조 하면 되겠습니다. 앞으로 같은 솔루션 내에 필요하면 프로젝트를 추가해서 사용해 볼 생각입니다.

 

- 솔루션 이릉 : CPP_Syntax

- 프로젝트 이름 : EX001

- Win32 콘솔 응용 프로그램 선택

- 빈프로젝트 선택

- 소스 파일 : main.cpp 추가

 

 

2. main.cpp 프로그램을 작성합니다.

 

/* C++ 문법 예제 프로그램
   Console 응용 프로그램 */
#include <iostream>

using std::cout;
using std::endl;

int main() {
	// 변수 선언
	int a, b;
	int c;

	a = 2;  b = 3;
	c = a + b;

	cout << "a의 값은 : " << a << endl
         << "b의 값은 : " << b << endl
         << "c의 값은 : " << c << endl;
	return 0;
}

 

콘솔 응용프로그램 예제

 

 

3. 먼저 실행을 해 보겠습니다. 

 

Ctrl + F5 키를 눌러서 실행합니다. 이것을 메뉴에서 디버그(D) -> 디버그하지 않고 시작(H) 를 선택하는 것과 같습니다.  최초 실행이라면 아마도 "이 프로젝트는 만료되었습니다." 라는 창이 뜰 것입니다.

 

이 프로젝트는 만료 되었습니다.

 

이 경우에 대해서 알아보니 여러가지 방법이 검색되기는 했지만, 정확한 방법은 찾지 못했습니다. 프로그램이 수정되어 새로 컴파일이 필요한경우에는 뜨고, 실행후 아무 변경도 없이 다시 Ctrl + F5로 실행할 경우에는 뜨지 않았습니다. 그냥 이 대화 상자 다시 표시안함에 체크하고 사용해도 될 것 같습니다.

 

만약 "빌드 오류가 발생했습니다. 계속하고 마지막으로 성공한 빌드를 실행하시겠습니까?" 라는 창이 뜬다면 소스에 오류가 있어서 실행파일을 만들지 못했다는 뜻 입니다.

 

빌드오류 창

 

이 경우는 창 하단의 출력창을 보면 오류가 난 곳이 보여지고 있을 것입니다.

 

에러 예)

1>c:\workspace\vs2017\cpp_syntax\ex001\main.cpp(19): error C2065: 'd': 선언되지 않은 식별자입니다.

 

이렇게 에러가 난 라인을 더블클릭하면 소스에서 에러가 난 라인으로 커서가 이동하고 표시가 됩니다. 그 부분을 이 글의 소스와 비교하여 보아서 에러를 잡으면 될 것입니다. 문제가 없다면 아래 처럼 실행이 될 것 입니다.

 

실행결과

 

실제 실행파일은 솔루션 디렉토리 아래에 Debug 폴더에 있을 것입니다.

 

C:\workspace\vs2017\CPP_Syntax\Debug\EX001.exe

 

참고로 실행파일을 만드는 과정에 대해서 알아보자면 먼저 소스를 기계어로 번역하는 컴파일 과정을 거칩니다. 보통 이때 오브젝트 파일(.obj)이 만들어지게 됩니다. 다음으로 링크(LINK)과정을 거치는데 이것은 프로그램에서 사용하는 함수/라이브러리들이 호출될 수 있도록 주소를 지정하는 과정이라고 생각하면 되겠습니다. 이렇게 링크 과정까지 마치면 실행파일인 .exe 파일이 만들어 집니다. 소스에 문법적인 문제가 있으면 컴파일시 오류가 발생하고, 링크 과정에서도 사용하려는 다른 .obj 파일이나 라이브러리를 찾지 못할경우 오류가 발생할 수 있습니다. 오류 메세지를 잘 읽어보는게 중요합니다.

 

 

4. 이제 위의 소스에 대해서 알아 보도록 하겠습니다.

 

- 프로그램의 전체적인 틀이 되는 부분이 main() 함수 입니다.

 

int main() 

{

    return 0;

}

 

main() 함수는 프로그램의 진입점(entry point)라고 불립니다. 우리가 실행파일을 더블클릭하여 실행한다는 것은 운영체제에게 이 프로그램을 실행을 하라고 명령을 내리는 것이 됩니다. 그러면 운영체제는 그 프로그램을 메모리로 로드하고 메모리에 올라온 프로그램의 특정부분에서 실행을 시작할 것입니다. 이 프로그램이 시작되는 부분이 entry point 인 main() 함수입니다. 운영체제는 프로그램에서 main() 함수를 찾아 프로그램을 시작 시키는 것입니다.

 

참고로 main() 함수는 정수형 반환값을 가지는데, main() 앞에 있는 int 가 이 함수는 정수값을 반환한다는 것을 나타내고 있고, return 0; 이 정수 0을 반환하는 문장 입니다. 이것의 의미는 0을 반환하면 프로그램이 에러 없이 정상 종료가 되었다는 뜻이고, 0 이외의 값을 리턴하면 프로그램 실행중에 오류가 있었다는 뜻입니다. 

 

UNIX 스타일의 프로그램에서 하나의 덩치 큰 프로그램을 만들기보다 기능단위의 작은 프로그램들을 만들고, 다른 프로그램에서 필요한 기능이 있을 경우 이렇게 만들어진 다른 작을 프로그램들을 호출해서 사용하는 경우가 많습니다. 이 경우 하나의 프로그램에서 다른 프로그램을 호출할 때 실행의 상태를 확인하기에 유용한 방법으로 사용되어 왔습니다. 실제로 그런게 필요가 없다면 다음과 같이 작성할 수도 있습니다.

 

void main()

{

}

 

반환값의 타입을 지정하는 곳에 void 를 쓰면 반환값이 없다는 뜻입니다.

 

- 주석(Comment)

주석은 프로그램 실행에는 영향을 주지 않고, 설명을 추가하는 것 입니다. C++ 에서 주석(comment)은 여러줄에 주석을 적을수 있는 /*   */ 과 한 줄만 주석으로 처리되는 // 가 있습니다. 슬래시스타라고도 부르는 여러줄 주석은 /* 에서 주석이 시작하고 */ 가 나오는 곳까지가 주석 입니다. 더블슬래시라고 불리는 한 줄 주석은 // 가 나온곳 부터 그 줄 끝까지가 주석입니다.

 

- 외부라이브러리 참조

#include <iostream> 부분은 외부 라이브러리를 참조 하겠다는 선언입니다. iostream 은 표준입출력 라이브러리로 키보드로부터의 입력과 화면으로의 출력을 처리할 수 있습니다.

 

- 외부라이브러리 사용

using std::cout;using std::endl;iostream 내의 cout객체와 endl 객체를 사용하겟다고 선언하는 것입니다. using 이 사용하겠다는 선언이고, std 는 네임스페이스로 객체들을 모아두는 라이브러리 구분자라고 생각하면 되겠습니다. 그리고  cout은 표준 출력을 담당하는 객체이고, endl 은 개행(줄바꿈)을  나타내는 객체 입니다. std::cout;더블 콜론(::)범위 결정 연산자(Scope Resolution Operator)로 불리는데, 클래스명이나, 네이스페이스 또는 문장의 맨앞에 사용되어 각각의 범위에 직접 접근하기 위해 사용됩니다. 이 부분에 대해서는 더 공부해 나가다보면 이해가 될 것으로 생각됩니다.

 

- 문장(statement)

문장은 세미콜론(;)으로 끝나게 됩니다. 하나의 문장은 보통 프로그램의 실행 단위가 됩니다. 보통은 한문장을 한 줄에 쓰지만 (int c;) 한 줄에 여러 문장을 적을 수도 있습니다.(a = 2; b = 3;) 또한 한 문장을 여러줄에 적을 수도 있습니다.(cout << ... endl;)

 

- 변수 선언

int a, b; int c;  부분에 변수 선언으로 a, b, c 라는 이름의 정수형 값을 담을 수 있는 곳을 만든다고 생각하면 되겠습니다. 변수(variable) 라고 불리는 이유는 값을 바꿔 넣을 수 있기 때문 입니다.

 

- 변수 할당

변수에 값을 넣는 작업 입니다. a = 2; b = 3; c = a + b; 와 같은 부분 입니다. 보통 수학에서 등호 (=)는 등호 좌우의 값이 서로 같다는 것을 나타나지만 프로그램에서는 대입 연산자 라고 불리며 오른쪽에 있는 값을 왼쪽에 넣는다는 의미로 사용합니다. 프로그램에서 같다는 의미의 기호는 보통 두 개의 등호(==)를 붙여서 사용합니다.

 

대입 연산자 좌측에는 변수가 옵니다. 오른쪽의 값을 넣어야 하기 때문에 값을 넣을 수 있는 뭔가가 와야 하는데, 이것이 변수입니다. 대입 연산자 오른쪽에는 변수, 리터럴(literal), 상수, 표현식 등 최종적으로 값으로 평가될 수 있는 것이 옵니다. 대입 연산자 왼쪽에 올 수있는것은 L-Value(Left Value), 오른쪽에 올 수 있는 것을 R-Value(Right Value) 라고 부릅니다. 역시 자세한 것은 앞으로 이것저것 해보다 보면 잘 알 수 있게 될것이라 생각 합니다.

 

- 값의 출력

 

cout << "a의 값은 : " << a << endl;

 

cout은 화면으로의 표준출력(여기서는 명령창으로의 출력)을 나타내는 객체 입니다. 여기에에 << 연산자를 사용하여 값들을 보낼 수 있습니다. "a의 값은 : "과 같은 즉시값(immediate value), 변수, 표현식 모두 가능합니다.  endl 은 줄바꿈을 나타내는 것입니다.

 

 

지금까지 해서 C++ 콘솔 응용 프로그램의 기본 구조에 대해서 알아 보았습니다. 이런 기본구조에 살을 붙여 나가면 프로그램이 완성되져 나가는 것 입니다. 앞으로 이 방법을 알아 보아야 하겠습니다.

반응형