
Hello World
몇 줄 되지 않는 이 예제 안에 이 글에서 이야기하고자 하는 요소가 모두 다 들어있습니다.
//Hello World 를 출력하는 프로그램입니다!
/*
이렇게
여러 줄을
주석처리 할 수도 있습니다.
*/
#iunclude <iostream>
using namespace std;
int main(){
cout<<"Hello World"<<endl;
return 0;
}
주석
// : 한 줄 주석. '//' 뒤에 자유롭게 내용을 적어주시면 됩니다.
/* 내용 */ : 여러 줄 주석.
전처리 지시자
전처리라는 말은 어떤 일을 수행하기 이전에 처리한다는 것을 의미하죠?
그렇기 때문에 빌드라는 것을 먼저 알아야 합니다.
빌드(build)의 단계
1. 전처리 단계 : 소스코드에 담긴 메타 정보를 처리한다.
2. 컴파일 단계 : 소스코드를 기계가 읽을 수 있는 오브젝트 파일(.o)로 변환한다.
3. 링크 단계 : 만들어진 오브젝트 파일들을 모두 모아 하나의 애플리케이션으로 엮는 단계이다.
이렇게 빌드가 끝나게 되면 프로그램 실행 파일이 만들어지게 됩니다.
이제 전처리 단계를 알았으니, 전처리 지시자에 대해서 알아보겠습니다.
전처리 지시자 : 전처리기에 전달할 사항을 표현한다. #으로 시작한다.
전처리 지시자 | 기능 |
---|---|
#include [파일] |
지정한 [파일] 의 내용을 지시자 위치에 넣습니다. |
#define [키] [값] |
코드에서 [키] 에 해당하는 부분을 모두 [값] 으로 바꿉니다. |
#ifndef [키] #endif #ifndef [키] #endif |
#ifdef : 'if defined,', #ifndef : 'if not defined,'. 즉, [키] 값이 #define으로 정의 되었는지의 여부에 따라 코드 실행 여부가 결정됩니다. |
#pragma [???] |
[???] 에 들어갈 값은 여러가지가 있습니다. 대표적으로는 #pragma once 가 있습니다. |
이제 우리는 #include 이란 구문에서 전처리 지시자를 사용했다는 것을 알 수 있습니다.
이 구문은 iostream이라는 헤더 파일에 있는 내용을 현재 파일에서 사용할 수 있게 모두 가져오도록 전처리기에 지시하는 구문입니다. 처음 시작하시는 분이라면 헤더 파일은 함수들을 모아둔 파일이라고 생각하시고 넘어가셔도 좋고, 좀 더 알고 싶으시다면 세부적인 정의를 보셔도 좋습니다. 일단 세부적인 내용도 적어놓겠습니다.
헤더 파일 (.h)
- 소스파일에서 구현할 함수들을 미리 선언해 둔 파일.
- 명시된 사항을 컴파일러에 미리 알려주고, 함수가 실제로 수행할 동작은 구현부(.cpp)에 작성해야 한다.
함수 선언부에 명시할 사항 : 함수의 호출 방식, 매개변수의 개수와 타입, 리턴 타입 등....
헤더 파일은 입력, 출력을 수행하는 함수를 포함하고 있습니다. 이 헤더를 include하지 않으면 텍스트를 입력, 출력하는 프로그램을 만들 수 없기 때문에 프로그래밍을 할 때 가장 먼저 접하게 되는 헤더이기도 합니다.
std::cout<<"Hello World"<<<std::endl;
에서 std::cout 은 출력의 기능, std::endl은 줄바꿈의 기능을 합니다. 추가로, std::cin 은 입력의 기능을 가집니다.
위에서 봤던 Hello World 예제에서는 std::가 없었죠?
그 이유는
using namespace std;
라는 코드 덕분입니다.
namespace
namespace는 협업을 위해 만들어졌습니다.
만약 다른 두 회사가 협업을 하는 도중에 같은 이름을 가진 함수를 만들었다고 생각해봅시다.
C언어라면 두 함수를 같은 이름으로 사용해버리면 에러를 발생하게 될 것입니다.
그래서 C++에서는 namespace의 개념을 도입해서 구현한 주체를 명시할 수 있도록 했습니다.
앞에서 사용한 using namespace std; 라는 코드는 현재 파일에 std라는 namespace에 속해있다고 명시해주는 것입니다.
하지만 using namespace std; 를 사용하는 것은 조심해야합니다.
다른 namespace를 가지는 같은 이름의 함수를 사용하려고 해도 std 안에 있는 함수를 사용하게 될 수도 있기 때문입니다.
그래서 처음 코드를 다음과 같이 바꿔 쓰는 것이 더 좋습니다.
#iunclude <iostream>
//using namespace std;
using std::cout;
using std::endl;
int main(){
cout<<"Hello World"<<endl;
return 0;
}
또는
#iunclude
//using namespace std;
//using std::cout;
//using std::endl;
int main(){
std::cout<<"Hello World"<<std::endl;
return 0;
}
이렇게 말이죠.
지금까지 C++의 기초 정리(1)이었습니다.
해당 내용들은 가장 기초가 되는 부분이므로 정확하게 개념을 잡고 이해하는 것이 중요할 것입니다.
다음번에는 기초 정리(2)로 돌아오겠습니다.
제가 잘못 알고있던 부분이 있다면 댓글 달아주시면 감사하겠습니다.
'프로그래밍언어 > C++' 카테고리의 다른 글
[c++] 4. 기초정리(4)- 열거 타입 enum 사용법 (0) | 2022.06.11 |
---|---|
[c++] 3. 기초정리(3) - 연산자 - 단항연산자, 이항연산자, 삼항연산자 (0) | 2022.06.10 |
[C++] 2. 기초 정리(2) - 리터럴, 변수, 자료형 (0) | 2022.06.10 |