본문 바로가기
CODING/C++ STUDY

C++ 독학 1일차! hello world 출력 및 코드 분석

by pharmerci 2021. 7. 18.
728x90

어제 공부하려고 했는데... 이외에 할일이 많았다(핑계)

 

cppg 공부도 못해서 이번주에 완벽한 한주 보내는게 목표다! 암튼 오늘은 C++ 공부 먼저 해볼것이다.

 

사실 지금까지 dev c를 이용해서 코드를 작성하고 컴파일을 해왔는데, 비주얼스튜디오 쓰고싶어서 새로 설치했다.

나의 첫 c++코드 감격스럽다

 

 

 

실행도 아주 잘되고~

코드야 보고 베낀거니까! 뭐가 어떻게 쓰인건지 봐야겠다.

 

 

1. #include <iostream>

c에서도 #include를 이용해서 헤더파일을 추가해줬는데 여기서도! 이름은 다르지만 헤더파일을 추가해준다

iostream은 c에서의 stdio.h와 비슷한 헤더파일이다. 표준 입출력에 필요한 것들을 포함하고 있다.

2. int main()

c언어랑 똑같다. 메인함수를 실행할 때 사용한다. 메인함수를 중괄호 { }를 이용해서 묶어 사용하는것도 c언어와 같다.


3.

{
std::cout << "hello world!!!" << std::endl;
return 0;
}

 

return 0은 매번 쓰는거니까 그렇다 치고?

std와 cout, endl가 미지의 친구들이다.

위에서 출력된것을 보다시피 한번 엔터쳐진 상태로 아무키나 누르라고 출력되는걸로 봐서는 std::endl은 c언어에서의 printf("\n");인가 싶기도 하다..

 

추리는 이정도로 하고 각 구성요소들이 뭘 의미하는지 살펴보자

A. std

std는 c++라이브러리의 이름공간이다. 이름공간은 정의된 객체가 어디 소속인지 지정해주는 것과 동일하다.

코드가 길면 겹치는 함수가 많아지는데 c++에서는 이것을 구분하기 위해 이름이 같아도 이름공간이 다르면 다른것이다!

이걸 나타내려고 쓰는 것이다.

그러니까 std::cout라고 쓴건 std 이름공간의 cout를 의미하는 것이다. cout만 써놓으면 cout의 출신을 알 수가 없는 것이다.

 

그런데 이름공간 header1과 header2에 똑같은 함수 A가 있다고 가정해보자. 여기서 똑같다는 것은 이름이 똑같다는 것이다. 기능은 다를 수도 있다.

자기 자신이 포함되어있는 이름공간에서는 header1::A이런식으로 굳이 안써도 자유롭게 사용이 가능하다. 당연히 header1이 호출되어 함수가 사용될꺼니까.

그런데 어떤 이름공간에도 소속되지 않는 코드를 짤때는 이름공간을 꼭 명시해줘야 한다.

 

우리는 많은 코드를 계속해서 입력해야 한다. 같은 이름공간의 함수를 계속 사용할 일도 많을 것이다.

이때 계속해서 header1::A ~~~~~~~ header1::A ~~~~~~~~~ 이렇게 치면 header1은 계속 반복되고..

 

너무너무 귀찮다!

 

이럴땐 using header1::A;

이 코드를 함수 바깥에 써준다면? header1에 있는 A함수를 쓸때는 적어도 header1::A 이렇게 안써줘도 되는 것이다.

이렇게 쓴다고 해서 header2의 B함수를 못쓰는 것은 아니다.

그냥 쓰던대로 header2::B 이렇게 써주면 된다.

 

그런데 using namespace std; 이런식으로 써주는게 사실 좋지는 않다.

std에 이름이 겹치는 함수를 만들면 오류가 생기기 때문이다. C++ 표준 라이브러리는 매우 거대한데 이름을 겹치게 쓰면 코드를 고치느라 시간이 오래 걸릴 것이다.

그래서 번거롭더라도 std::를 앞에 붙여주는게 좋다고 한다.

우리가 만드는 함수는 따로 만든 이름공간에 넣어서 보관해주는게 이름충돌로부터 보호할 수 있다.

 

B. cout

iostream에서 표준 출력을 담당하고 있다.

 

C. endl

화면에 출력해주는 함수이다.

 

c++에서는 이름공간에 이름을 설정하지 않아도 된다.

이렇게 하면 해당 이름 공간에 정의된것들은 해당 파일 안에서만 접근할 수 있다.

 

728x90