Hello World

C++ 소개

C++언어는 C언어에 객체 지향 프로그래밍 기능을 추가하여 만든 언어입니다. 그래서 많은 부분들이 C언어와 형태가 비슷합니다. C++ 언어는 C언어를 하위 요소로서 유지하면서 여러 문법 요소를 추가했으며, 다른 객체 지향 언어와는 다르게 메모리 등을 프로그래머가 직접 관리하게 하기 때문에 전반적인 클래스 디자인 자체가 상당한 차이를 보입니다. 그래서 C++언어는 많은 공부가 필요하며, C 언어와는 다른 언어로 파악하고 접근해야 합니다.

 

현재는 C++언어의 발전으로 인하여, 2011년부터 새로운 형태의 C++ 표준이 발표되었는데, 이를 C++11/17/20/23 혹은 Modern C++이라고 부릅니다. C++에 대한 표준은 ANSI(American National Standards Institure)와 ISO(International Organization for Standardization)가 표준화 작업을 진행합니다. 앞서 언급한 듯이 C++언어는 2011년에 많은 언어적 특성이 추가된 ISO/IEC 14882:2011이 발표되면서 C++11이라고 부르게 됩니다. 이후 버그 수정과 기술적 개선을 통해서 

2023년 현재 C++23까지 개정되었습니다. 용어의 통일을 위해서 앞으로 Modern C++이라고 부르도록 하겠습니다.

 

모든 언어를 학습하게 되면 맨 처음 작성하게 되는 프로그램이 "Hello World"라는 프로그램입니다. 이 프로그램은 그 언어의 아주 기본적인 코드를 볼 수 있는 예제입니다. C++로 작성한 Hello World 프로그램은 아래와 같습니다. 

 

Hello World 프로그램

#include <iostream>                                                                                                                                    

/* Main Function */
int main(void)
{
	// Hello world optput */
	std::cout << "Hello world" << std::endl;
	return 0;
}

 

소스 코드를 보면 C++ 언어의 기본 구조는 헤더와 메인으로 구성됩니다.

 

헤더(Header File) 

일반적은 C++ 프로그램 표준은 #include 문을 사용하여 iostream과 같은 C++ 표준  라이브러리가 정의된 헤더 파일을 불러와 사용합니다. 헤더 파일의 주 용도는 내가 작성하려는 소스 코드에 사용하는 함수를 사용할 있도록 해줍니다.

 

현재의 컴파일러들은 기능이 좋아 헤더파일을 선언하지 않아도 C++ 표준 라이브러리는 빌드하는데 문제가 없을 수 있지만, 내가 사용하고자 하는 C++의 클래스와 메서드를 사용하기 위해서는 필수로 헤더 파일을 선언해줘야 합니다.

 

C++로 적성된 소스 코드를 빌드할 때, 전처리 단계에서, 지시자(Directive)는 #include <iostream>처럼 #문자로 시작하는 코드를 컴파일러에 전달하게 됩니다. 여기서 헤더 파일에 있는 모든 내용을 현재 파일에서 사용할 수 있게 모두 가져오도록 전처리기에 지시합니다. iostream.h 헤더 파일은 C++에서 제공하는 입출력 함수를 가지고 있어서, cout() 함수를 사용할 때 입력해줘야 합니다. 이는 함수 선언은 그 함수의 호출 방식, 매개변수의 개수와 타입, 리턴 타입 등을 컴파일러에 알려주어, main() 함수에 선언한 함수를 실제로 수행할 동작을 작성할 수 있기 때문입니다.

 

#include <iostream> 문법은 Modern C++ 이전에는 표준 C++ 라이브러리를 불러올 때, *.h로  사용해야 했습니다. 하지만 현재의 C++에서는 *.h 확장자를 별도로 사용하지 않아도 됩니다.

 

주석(Comment)

소스 코드를 보면 "/* */"와 "//"를 사용한 부분이 있습니다. 이것은 주석으로, 프로그래머에게 전달하는 메시지이며, 소스 코드의 설명 등을 간단한게 전달하거나 나중에 소스 코드 부분을 이해하기 위해서 메시지를 남기는 것입니다. 주석은 컴파일러에게 전달되면 무시되기 때문에, 프로램의 크기와는 상관없이 작성할 수 있습니다. 좋은 프로그램일수록 주석은 많은 게 좋습니다. 프로그램 개발은 혼자 하는 것보다 다른 팀원 분들과 협업하여 개발하는 부분이 많기 때문에 주석을 통해서 내가 구현한 부분을 전달할 수 있기 때문입니다.

 

주석은 앞서 말씀드린 것처럼 두 가지 사용법이 있습니다. 한줄에 모든 메시지를 전달하고 싶을 경우에는 아래와 같이 사용할 수 있습니다.

 

// 전달 내용

 

만약 여러 줄로 작성된 메시지를 전달하려면 아래와 같이 사용하시면 됩니다.

 

/*
  전달 내용
 */

 

메인(Main)

C++로 개발된 모든 프로그램은 main() 함수에서 시작합니다. 위의 소스 코드처럼 main 앞에 붙는 타입을 반환되는 데이터 타입을 의미하며, 프로그램이 종료될 때 운영체제에게 반환되는 상태를 의미합니다. 소스 코드의 맨 마지막 return 문을 통해서 "0"을 반환합니다. 데이터 형이 int로 정수형 데이터를 반환하라는 뜻이며, "0"은 프로그램 언어에서 성공이라는 의미를 가집니다.

 

main 뒤에 붙는 것을 파라미터(매개변수)라고 하며, 프로그램이 시작할 때 전달할 수 있는 데이터를 의미합니다. void를 입력하면 입력 값이 없다는 의미입니다. 만약, 프로그그램 시작 시 입력해야 할 인자가 있다면 아래와 같이 코드를 작성합니다. argc는 프로그램에 전달되는 인자의 개수를 의미하고, argv는 전달할 인자의 값을 의미합니다.

 

int main(int argc, char **argv) 혹은 int main(int argc, char *argv[])

 

I/O 스트림

I/O 스트림(Input/Output Stream)은 입력과 출력에 대한 C++ 표준 라이브러리를 헤더로 선언하면, td::cout() 메서드를 통해서 Hello World라는 문구를 출력할 수 있습니다.

 

이렇게 기본적으로 C++ 코드로 구성된 내용을 살펴봤습니다. 이를 VSCode나 Ubunut의 gcc 컴파일러를 통해서 프로그램을 빌드하면 아래와 같이 결과를 볼 수 있습니다.

 

실습

실습은 Ubuntu 환경에서 진행했습니다. 먼저 위의 소스 코드를 작성하고, 컴파일하기 위해서 아래 명령어를 입력합니다.

 

g++ main.cpp -o app

 

프로그램을 실해하면 아래와 같이 Hello world가 출력되는 것을 볼 수 있습니다.

 

 

Modern C++(C++17/C++20)

위에서 작성한 Hello world 프로그램은 C++17 버전에서도 동일한 코드를 사용합니다. 하지만 C++20에서는 #include 지시자를 사용하는 대신 모듈 임포트(import)를 사용합니다. 모듈은 C++20에서 새롭게 추가된 기능 중에 하나입니다. 모듈은 이전에 헤더 파일을 선언할 때 사용한 #include 지시자를 대체하게 되었습니다.  C++20에서 모듈을 이용한 Hello world 프로그램은 아래와 같습니다.

 

import <iostream>;

int main(void)
{
	std::cout << "Hello world" << std::endl;
	return 0;
}

 

기본 구조는 같지만 헤더 파일을 선언하기 위해서 #include 지시자 대신 import 명령어를 사용하는 것 볼 수 있습니다. Ubuntu 환경에서 C++20을 빌드하기 위해서 아래 명령어를 입력합니다.

 

g++ -std=c++20 -fmodules-ts -xc++-system-header iostream
g++ -std=gnu++20 -fmodules-ts -o app main.cpp

 

결과 화면은 아래와 같습니다.

 

 

이 글을 공유하기

댓글

Designed by JB FACTORY