본문 바로가기
C │ C++ │ C#/C++

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

by Pokaa 2023. 8. 12.
728x90
728x90
SMALL
네임스페이스

 

  • 함수와 변수들에 이름을 붙여줄 수 있다.
  • 네임 스페이스를 사용하는 이유
    ο 같은 이름의 함수나 변수더라도 구별할 수 있게 된다.
    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  ,  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
728x90
300x250
LIST