C++ Chapter 1.5 : 네임스페이스, 전처리기
카테고리: Cpp
태그: Cpp Programming
인프런에 있는 홍정모 교수님의 홍정모의 따라 하며 배우는 C++ 강의를 듣고 정리한 필기입니다. 😀
🌜 [홍정모의 따라 하며 배우는 C++]강의 들으러 가기!
네임스페이스
- 함수와 변수들에 이름을 붙여줄 수 있다.
- 네임 스페이스를 사용하는 이유
- 같은 이름의 함수나 변수더라도 구별할 수 있게 된다.
ex)
- Myspqce 네임스페이스 공간 안에 있는 doSomething 함수
- 호출시
Myspace::doSomething(3, 4);
- 호출시
- 네임스페이스 안붙은 공간 안에 있는 doSomething 함수
- 호출시
doSomething(3, 4);
- 호출시
- 두 함수는 이름과 매개변수 타입, 리턴 타입까지 같지만 별개의 다른 함수다.
- 네임스페이스가 다르기 때문 !
namespace Myspace { int doSomething(int a, int b) { return a + b; } } int doSomething(int a, int b) { return a * b; } using namespace std; int main() { cout << doSomething(3, 4) << endl; }
using namespace 뫄뫄
- 하면 해당 namespace를 생략할 수 있다.
- using namespace std
- 하면 std::cout 이라고 안해도 되고 그냥 cout이라고만 해도 std의 cout이 호출 됨
- 함수 안에도 쓸 수 있다. 함수 내부 안에서만 네임스페이스 생략 가능하도록
- 네임스페이스 안에 네임스페이스 또 쓸 수 있다.
- ex)
- Myspace::InnerSpace::func()
- using namespace Myspace::InnerSpace
namespace Myspace { namespace InnerSpace { int func ( ) { return 0; } }
- ex)
전처리기
#define
- 매크로.
- 해당 파일 안에서만
정의
가 적용된다.- #define NUMBER 9
- NUMBER들은 다 9로 정의된다.
- #define NUMBER “Hello”
- NUMBER들은 다 “Hello”로 정의된다.
- #define Max(a, b) (a > b) ? a : b
- Max(1, 2) → (1 > 2) ? 1 : 2
- 즉 2로 정의된다.
- Max(1 + 3, 2) → (1 + 3 > 2) ? 1 + 3 : 2
- 즉 1+3=4, 4로 정의된다.
- Max(1, 2) → (1 > 2) ? 1 : 2
- #define NUMBER 9
ifndef
,ifdef
와endif
와의 응용- ifdef + 매크로 ~ endif : 해당 매크로로 정의가 됐을 때 이 구간 복사 허용
- ifndef + 매크로 ~ endif : 해당 매크로로 정의가 되지 않았을 때 이 구간 복사 허용
-
ex)
#include <iostream> #define APPLE int main() { #ifdef APPLE std::cout << "APPLE" << std::endl; #endif #ifndef APPLE std::cout << "APPLE" << std::endl; #endif }
- “APPLE”이 출력 될 것 !
- “APPLE”이 정의되어 있기 때문에
-
ifdef APPLE 정의 되어 있기 때문에 이부분이 실행된다
#ifdef APPLE std::cout << "APPLE" << std::endl; #endif
-
ifndef APPLE → APPLE이 정의 되어 있기 떄문에 이부분은 실행되지 않는다.
- 만약 #define APPLE이 없거나
- #define이 다른 코드 파일에 있다면 ( #define은 파일 안에서만 효력 )
- 아래 부분이 실행되겠지.
#ifndef APPLE std::cout << "APPLE" << std::endl; #endif
-
- “APPLE”이 정의되어 있기 때문에
- “APPLE”이 출력 될 것 !
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
댓글남기기