본 포스팅은, 모두의 코드(https://modoocode.com/)를 공부하며 기록하였습니다.
#include <iostream>
int main() {
std::cout << "Hello, World!!" << std::endl;
return 0;
}
main함수를 정의하는 부분이다. 프로그램이 실행될 떄 가장 먼저 실행되는 함수다.네임 스페이스는 어떤 정의된 객체에 대해 어디 소속인지 지정해주는 것과 동일하다.
코드의 크기가 늘어나면서, 다른 사람들이 쓴 코드를 가져다 쓰는 경우가 많아졌다. 이때 중복된 이름을 가진 함수들이 많아졌는데, 이를 구분하기 위해 같은 이름이라도, 네임 스페이스가 다르면 다른 것으로 취급한다.
아래 코드에서 header1에 있는 foo는 header1의 함수고,
header2에 있는 foo는 header2의 함수다.
// 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와 같이 네임 스페이스를 사용하는 것은 권장되지 않는다. 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;
}
화면에 출력되는 것들을 바꾸어보자. (O)
아래 문장은 화면에 어떻게 출력할까? (O)
std::cout << "hi" << std::endl
<< "my name is"
<< "Psi" << std::endl;
->
들여쓰기 처럼 될 것 같음.
hi
my name is Psi
