C++ Chapter 1.5 : 네임스페이스, 전처리기

Date:     Updated:

카테고리:

태그:

인프런에 있는 홍정모 교수님의 홍정모의 따라 하며 배우는 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;
        		}
        }
      

전처리기

#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로 정의된다.
  • ifndef , ifdefendif 와의 응용
    • 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
              


🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

맨 위로 이동하기

Cpp 카테고리 내 다른 글 보러가기

댓글 남기기