C++은 흔히 C의 개선판 혹은 상위 집합으로 생각할 수 있다. C++은 C에 객체지향 개념을 추가하려는 목적으로 디자인 되었기에 클래스가 있는 C로도 생각할 수 있다.
간단한 C++ 코드 예제를 살펴보자.
//helloworld.cpp
#include <iostream>
int main()
{
std::cout << "Hello, World!" << std::endl;
return 0;
}
위 코드는 화면에 'Hello, World!'라는 메시지를 출력한다. 매우 단순한 코드지만 C++의 기초적인 구성을 담고 있어서 C++의 형식을 이해하는데 중요한 개념들을 익힐 수 있다.
각 라인별로 살펴보면
//helloworld.cpp
주석으로 프로그래머에게만 유용한 메세지로 코드의 각 라인을 해석하는 컴파일러는 이 부분을 무시한다. 이를 통해서 프로그래머는 중요한 메모를 남길 수 있다. 위와 같이 한줄 주석은 //와 같이 슬래시를 연달아 두번 사용하고 여러줄 주석의 경우 /* 문장 */의 형식으로 사용한다.
// 한줄 주석
/* 여러 줄 주석
컴파일러는 이 부분을 무시한다. */
두번째 줄은 전처리 지시자이다.
#include <iostream>
C++로 작성된 소스 코드를 프로그램으로 만드는 빌드 작업은 세 단계를 거치는데 먼저 전처리 단계에서 소스코드에 담긴 메타 정보를 처리한다. 이어서 컴파일 단계에서 소스 코드를 머신이 읽을 수 있는 오브젝트로 오브젝트 파일로 처리하고 링크 단계에서 변환한 여러 오브젝트 파일을 엮어 프로그램을 만든다.
이때 전처리 단계를 처리하는 전처리기에 전달할 내용을 표현하는 것이 전처리 지시자이다. 전처리 지시자는 위와 같이 #으로 시작하며 용도에 따라 여러 키워드가 있다.
전처리 지시자
|
기능
|
사용 예
|
#include [파일]
|
지정 파일의 내용을 지시자 위치에 넣는다
|
다른 곳에 정의된 함수를 사용할 목적으로 해당 함수의 헤더 파일을 가져온다
|
#define [키] [값]
|
키에 해당하는 부분을 값으로 할당한다.
|
C에서는 주로 상숫값이나 매크로를 정의하는데 사용한다. C++는 이에대해 좀더 개선된 매커니즘을 제공한다. 이는 추후에 살펴보자.
|
#ifdef [키]
{코드} #endif #ifndef [키] {코드} #endif |
지정한 키가 #define 문으로 정의됐는는지에 따라 사이에 있는 코드를 실행할지 말지를 결정한다.
#ifdef는 정의됐다면 #ifndef는 정의돼 있지 않다면 |
인클루드 문장이 중복해서 추가되는 것을 막는 용도로 사용한다.
|
#pragma [xyz]
|
xyz에 대한 동작이 컴파일러마다 다르다.
|
#pragma once와 같이 중복 인클루드를 막는데 사용된다.
|
다음 코드를 살펴보자.
int main()
구문은 프로그램이 항상 시작되는 main() 함수를 보여준다. main() 함수는 int 타입의 값을 리턴하고 이는 프로그램의 실행 결과에 대한 상태를 표시한다.
return 0;
위의 리턴 구문이 main() 함수의 리턴 값이 되고 이는 생략해도 되는데 생략 시 자동으로 0이 리턴된다.
마지막 코드인
std::cout << "Hello, World!" << std::endl;
이 프로그램에서 화면에 'Hello, World!'를 보여주는 부분으로 I/O스트림에 해당한다. 이는 추후에 자세히 다룰 내용이지만 간단히 소개하면 std::cout이라는 길에 << 연산자를 이용해서 "Hello, World!"구문을 올려서 보낸다고 생각하면 된다. 이 때 std::cout이라는 길이 사용자 화면으로 이어지는 길이다. 추가로 std::endl는 문장의 끝을 나타내서 한줄 넘어가는 역할을 한다.
추가로
{
//Code
}
{ Code } 는 코드 블럭으로 코드가 쓰여지는 범위(Scope)를 한정하는 역할을 해준다.
'C++' 카테고리의 다른 글
C++ 기초(조건문) (2) | 2023.01.19 |
---|---|
C++ 기초(enum, struct) (0) | 2023.01.19 |
C++ 기초(변수와 연산자) (0) | 2023.01.19 |
C++ 기초(리터럴) (0) | 2023.01.19 |
C++ 기초(namespace) (0) | 2023.01.19 |