Visual Studio가 설치돼있지 않으신 분들은 이전 글을 먼저 보고 오시는 것을 추천드립니다.
이전 글 : 2022.03.04 - [C++ 독학] - [C++ 독학] 기본 환경 세팅
Hello world!!
우리가 이전 시간에 설치했던 개발환경에 다음과 같이 입력해 봅시다.
// Hello world!!
#include<iostream>
using namespace std;
int main() {
cout << "Hello world!!" << endl;
return 0;
}
다 입력을 하셨으면 [Ctrl+F5]를 누르거나 맨 위 메뉴바 중에 [디버그 -> 디버그 하지않고 시작]을 눌러 실행시켜 줍시다.
그러면 다음과 같은 결과를 보실 수 있습니다.
축하드립니다! 여러분의 첫 C++프로그램을 실행시켰습니다.
그럼 코드를 하나하나 분석해 볼까요?
; 세미콜론
; (세미콜론)은 프로그램을 작성할 때 각 구문과 구문을 구별해 주는 역할을 합니다.
만약 우리가 작성한 코드에서 세미콜론을 뺀다면 다음과 같은 에러를 보여줍니다.
우리 눈에는 세미콜론 하나 빠지는게 큰 차이가 없어 보이지만 컴퓨터는 다음과 같이 이해하게 됩니다.
#include<iostream>
using namespace stdint main() {
cout << "Hello world!!" << endlreturn 0
}
때문에 C++프로그래밍을 하실 때 뒤에 꼭 붙여야 합니다.
전처리 지시자
우리가 첫 줄에 작성했던 #include<iostream>은 과연 무슨 뜻일까요?
우선 이를 이해하기 위해선 C++가 어떻게 프로그램으로 빌드(build) 되는지 알아야 합니다.
소스코드의 빌드 과정은 다음과 같이 [전처리 -> 컴파일 -> 링크] 순서로 총 세 단계를 거치게 됩니다.
preprocessing(전처리) | 소스코드에 담긴 메타정보(metadata)를 처리한다. |
compile(컴파일) | 소스코드를 컴퓨터가 읽을 수 있도록 오브젝트(object)파일로 변환한다. |
link(링크) | 오브젝트(object) 파일들을 애플리케이션으로 묶는다. |
각 작업을 처리하는 프로그램을 전처리기(preprocessor), 컴파일러(compiler), 링커(linker)라고 부른다.
전처리에 대해 쉽게 설명하자면 소스코드를 컴파일 하기 '전'에 미리 실행해야 할 부분을 '처리'한다고 생각하시면 됩니다.
다음으로 지시자(directive)란 전처리기에 전달할 사항을 표현하고 주로 #으로 시작합니다.
전처리 지시자는 우리가 사용했던 #include 외에도 다양한데 자주 쓰는 전처리 지시자로는
#define, #ifdef - #endif, #ifndef - #endif, #pragma 등 이 있습니다.
더 많은 전처리 지시자는 아래 링크를 타고 보시면 좋을 것 같습니다. (추후 부록에도 정리해 놓겠습니다)
전처리 지시자 : https://docs.microsoft.com/ko-kr/cpp/preprocessor/preprocessor-directives?view=msvc-170
전처리기 지시문
자세한 정보: 전처리기 지시문
docs.microsoft.com
이 중 우리가 사용했던 #include는 우리가 소스코드를 작성하며 필요한 헤더 파일(함수, 클래스 등)을 불러오는 것입니다.
즉, #include <iostream>이란 뜻은 'iostream'이라는 헤더 파일을 불러오겠다'라는 뜻으로 해석하면 됩니다.
여기서 헤더 파일이란?
가볍게 설명하자면 우리가 사용할 기능들을 가지고 있는(미리 정의해 놓은) 파일입니다.
main() 함수
모든 로직의 시작과 끝 main() 함수
우리가 짠 코드의 모든 시작과 끝은 main() 함수에서 이루어집니다. 때문에 우리의 코드 내에서 유일한 존재이고
만약 main함수를 두 개 사용한다면..
다음과 같은 에러를 만나게 되실 겁니다.
그리고 함수와 return 0; 에 대해서는 뒤에 따로 정리해 놓겠습니다.
I/O 스트림
데이터를 나르는 컨베이어 벨트
I/O스트림은 Input/Output stream 즉, 입출력 스트림은 프로그램의 입력과 출력을 담당합니다.
C++에서의 원리는 굉장히 간단한데
출력을 하기 위해 std::cout을 작성해 주고 << 연산자로 각 구문을 이어줍니다.
마치 컨베이어 벨트처럼 말이죠
ex)
cout << "Hello" << "world" << "!!" << endl;
이런 식으로 활용하셔도 됩니다. ㅎㅎ
cout << "H" << "e" << "l' << "l" << o" << "w" << "o" << "r" << "l" << "d" << "!!" << endl;
맨 뒤에 나오는 'endl'은 줄을 바꿔주는 코드입니다.
이와 같은 문자를 이스케이프 시퀀스(excape sequence)라 부르고 '\n'로 대체 가능합니다. (endl = '\n')
더 많은 이스케이프 시퀀스는 부록에 따로 정리해 놓겠습니다.
네임스페이스
코드에서 이름 중복 문제의 해결
조금 어려운 개념일 수 있습니다. 코딩을 처음 해보시는 분들은 넘어가셔도 좋습니다. 뒤에서 더 자세히 설명하겠습니다.
만약 여러분이 코드를 작성하다가 'value'라는 중복된 이름의 코드를 작성했다고 생각해 봅시다.
코드가 10줄이면 하나하나 바꿔주면 되겠지만 1000줄 10000줄이 넘어간다면.. 상상하기도 싫은 작업을 밤새 해야 할 수도 있습니다.
이런 문제를 해결해주기 위해 namespace가 존재합니다. 뒤에서 자세히 설명하겠지만 간단히 짚고 넘어가자면
'value'라는 이름을 각각 다른 공간에 선언하는 것입니다.
ex)
namespace space1 {
int value;
}
namespace space2 {
int value;
}
이렇게 되면 같은 value지만 각각 다른 공간에 정의 되게 됩니다.
그리고 value값을 사용하려면 space1::value, space2::value와 같이 :: 스코프 지정 연산자(scope resolution operator)를 사용합니다. 하지만 이렇게 되면 value를 사용할 때마다 귀찮음을 감수해야 합니다.
하지만 using namespace를 사용한다면 space1:: , space2:: 를 붙이지 않고도 value를 사용할 수 있습니다.
만약 space1을 기본으로 사용하려면 using namespace space1을
space2를 기본으로 사용하려면 using namespace space2를 추가하면 됩니다.
때문에 우리가 using namespace std; 를 추가한 이유는 std:: 를 쓰고 싶지 않아서입니다.
using namespace std; 를 뺀다면
#include<iostream>
int main() {
std::cout << "Hello world!!" << std::endl;
return 0;
}
이런 식으로 cout과 endl 앞에 std::를 추가해 줘야겠죠?
주석
주석은 프로그램이 실행될 때 컴퓨터가 읽지 못하도록 블라인드 처리 해 놓은 것입니다.
왜 주석을 사용할까요?
대체로 자신의 코드에 설명이 필요할 때 사용합니다. 다른 개발자와 협업을 하거나 자신의 코드를 공개할 때 그 코드의 세세한 부분에서 어떤 방식으로 작동하는지, 만든 날짜, 만든 이, 최근 업데이트 날짜 등을 상세히 적어 놓을 수 있습니다.
주석은 // 를 사용하고 뒤에 올 설명(comment)를 적으면 해당 행(row) 뒤에 오는 문자는 컴파일되지 않습니다(컴퓨터가 실행시키지 않습니다).
cout << "hello world!!" << endl; // cout << "comment"; <- 이 부분은 실행하지 않습니다.
// 를 사용한 주석은 한 행(row)에 대한 주석이고 여러 열(column)에 대한 주석은 /* */ 를 사용합니다.
cout << "H" << endl;
cout << "e" << endl;
/* cout << "l" << endl; <-
cout << "l" << endl; <- 실행되지 않음
cout << "0" << endl; */ <-
cout << "!" << endl;
cout << "!" << endl;
마치며
어렵고 지루하셨을 텐데 끝까지 따라오신 분들 수고 많으셨습니다.
마무리로 "C++ 프로젝트" 에서 연습문제들을 풀어보시면 많은 도움 되실 거라 믿습니다.
2022.03.06 - [C++ 독학/[C++독학] 프로젝트] - [C++ 독학] 정보를 출력해보자! <프로젝트 01>
[C++ 독학] 정보를 출력해보자! <프로젝트 01>
정보를 출력해보자 자신의 정보를 출력하는 프로그램을 만들어 봅시다. 출력결과. 다음과 같이 출력하는 프로그램을 작성해 주세요! 만약 어렵다면 이전 글을 보고 오시길 바랍니다. 2022.03.05 - [
npscause.tistory.com
'C++ 독학 > [C++ 독학] C++ 배우기' 카테고리의 다른 글
[C++ 독학] 포인터 <C++ 의 기초> 05 (1) | 2022.04.05 |
---|---|
[C++ 독학] 배열 <C++기초> 04 (0) | 2022.03.31 |
[C++ 독학] 제어문 <C++기초> 03 (0) | 2022.03.17 |
[C++ 독학] 변수와 타입 <C++의 기초> 02 (0) | 2022.03.06 |
[C++ 독학] 기본환경 세팅 (0) | 2022.03.04 |
댓글