C++ - 프로그램 시작

뭉크의 개발·2024년 2월 5일

C++

목록 보기
1/3

본 포스팅은, 모두의 코드(https://modoocode.com/)를 공부하며 기록하였습니다.

#include <iostream>

int main() {
	std::cout << "Hello, World!!" << std::endl;
	return 0;
}

include iostream?

  • iostream이라는 .h파일을 include한다.
  • iostream은 C++에서 표준 입출력에 필요한 것들을 포함하고 있다.

int main()

  • main함수를 정의하는 부분이다. 프로그램이 실행될 떄 가장 먼저 실행되는 함수다.

std?

  • std는 C++ 표준 라이브러리의 모든 함수, 객체 등이 정의된 이름 공간(namespace)다.

cout

  • ostream 클래스의 객체로 표준 출력(C의 stdout)

endl

  • 화면에 출력해주는 함수.

NameSpace

  • 네임 스페이스는 어떤 정의된 객체에 대해 어디 소속인지 지정해주는 것과 동일하다.

  • 코드의 크기가 늘어나면서, 다른 사람들이 쓴 코드를 가져다 쓰는 경우가 많아졌다. 이때 중복된 이름을 가진 함수들이 많아졌는데, 이를 구분하기 위해 같은 이름이라도, 네임 스페이스가 다르면 다른 것으로 취급한다.

  • 아래 코드에서 header1에 있는 fooheader1의 함수고,
    header2에 있는 fooheader2의 함수다.

// header1.h
namespace header1 {
int foo();
void bar();
}
// header2.h
namespace header2 {
int foo();
void bar();
}
  • 아래 코드는 자기 자신이 포함되어 있는 네임 스페이스 앞에 네임 스페이스를 명시하지 않고 자유롭게 부를 수 있다.
#include "header1.h"

namespace header1 {
int func() [
	foo(); // header1 :: foo()
    }
} // namespace header1
  • header1 네임 스페이스안에서 foo를 부른다면, 알아서 header1 :: foo()를 호출한다.

  • 아래는 header1 네임 스페이스 안에서, header2 :: foo()를 호출한다.

#include "header1.h"
#include "header2.h"

namespace header1 {
int func() {
	foo(); // header1::foo()
	header2::foo(); // header2::foo()
    }
}
  • 반면 어떤 네임 스페이스에도 소속되지 않는 경우는 명시적으로 네임 스페이스를 지정해야한다.
#include "header1.h"
#include "header2.h"

int func(){
	header1::foo();
}
  • foo를 여러번 반복 호출하면 매번 header1::를 붙이기 귀찮은데, 이때 아래와 같이 어떤 네임 스페이스에 있는 어떤 함수만 쓰겠다 라고 호출할 수 있다.
#include "header1.h"
#include "header2.h"

using header1::foo;
int main(){
	foo(); // header1 에 있는 함수 호출
}
  • 기본적으로 header1 네임 스페이스안에 정의된 모든 것을 header1::없이 사용하고 싶다면, using namespace header1;로 명시하면 된다.
#include "header1.h"
#include "header2.h"

using namespace header1;
int main(){
	foo();
    bar();
}

using namespace std 🤔

  • 그러나 using namespace std와 같이 네임 스페이스를 사용하는 것은 권장되지 않는다. std에는 매우 많은 함수들이 포함되어 있기 때문에, 만약 겹친다면 오류를 해결하는데 많은 시간이 쓰일 것이고, 충돌할 수 있는 경우의 수가 너무 많아진다. 그래서 std는 명시적으로 사용하자.

네임 스페이스가 없는 공간

  • C++에서는 네임 스페이스 안에 굳이 이름을 설정하지 않아도 된다.

  • 마치 static 처럼 해당 파일 안에서만 접근할 수 있다.

#include <iostream>

namespace {
// 이 함수는 이 파일 안에서만 사용할 수 있다.
// static int OnlyInThisFile()과 동일하다.

// 이 변수도 static int x와 동일하다.
int OnlyuInThisFile() {}

int only_in_this_file = 0;
} // namespace

int main(){
	OnlyInThisFile();
    only_in_this_file = 3;
}

💡Apply

  1. 화면에 출력되는 것들을 바꾸어보자. (O)

  2. 아래 문장은 화면에 어떻게 출력할까? (O)

std::cout << "hi" << std::endl
		  << "my name is"
          << "Psi" << std::endl;

->
들여쓰기 처럼 될 것 같음.

hi
my name is Psi

0개의 댓글