C언어
- 동일한 이름의 함수는 2개 이상 만들 수 없다.
- 함수의 이름을 변경해야 한다.
C++ 언어
- namespace 문법을 사용하면 관련된 코드(함수, 구조체, 전역 변수 등)을 묶어서 관리할 수 있다.
- 서로 다른 이름 공간에서는 동일한 이름 사용할 수 있다.
#include <stdio.h>
namespace Audio{
void init(){
printf("Init Audio Module\n");
}
}
namespace Video{
void init(){
printf("Init Video Module\n");
}
}
int main(){
//init();
Audio::init();
Video::init();
}
#include "Video.h"
// 방법 1. 권장
namespace Video{
void init(){
}
}
// 방법 2. 권장X (class와 헷갈릴 수 있음)
void Video::reset(){
}
✔ namespace 요소에 접근하는 방법
ⓐ qualified name(완전한 이름) 사용 : 권장 방식
Audio::init();
ⓑ using declaration(선언) 사용
- init 함수를 namespace이름인 Audio:: 없이 사용 가능
using Audio::init;
init(); //ok
reset(); //error
ⓒ using directive(지시어) 사용하는 방식
//Audio 안의 모든 함수를 Audio:: 없이 사용 가능
using namespace Audio;
init();
reset();
# global namespace
👉특정한 이름공간에 포함되지 않은 공간
init() | 1. 열려있는 namespace 검색 2. global namespace 검색 |
::init() | 1. global namespace 검색 2. global init()이 없는 경우 에러 |
using declaration을 함수 밖에서 사용한 경우.
- using 선언 아래 있는 모든 함수에서 Audio:: 이름 없이 접근 가능
- global namespace에 동일 이름의 함수가 있을 경우 compile error.
- global namespace에 동일 이름의 함수가 없을 경우 init(), ::init() 모두 Audio::init() 호출
#include <stdio.h>
namespace Audio{
void init(){
printf("Init Audio Module\n");
}
}
namespace Video{
void init(){
printf("Init Video Module\n");
}
}
//void init() { printf("init global module\n"); }
using Audio::init;
int main(){
Audio::init();
Video::init();
using Audio::init;
::init(); // global module
init();
}
반응형
'프로그래밍 > C ++' 카테고리의 다른 글
[C++] 함수 (0) | 2024.12.03 |
---|---|
[C++] 자료형 (묵시적형변환) (0) | 2024.12.03 |
[c++] C++ 변수의 특징 (0) | 2024.07.08 |
[C++] iosteam 표준 입출력 (0) | 2024.07.08 |
[c++] std namespace / header file (0) | 2024.07.04 |