본문 바로가기

C++

C++ 기초

728x90

 

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)를 한정하는 역할을 해준다.

 

 

 

728x90

'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