c++

11월 1일 namespace 기초

송시혁 2013. 11. 1. 11:07


scope operator '::' 범위지정.

예를들어 코드에서 전역변수 a=100;이라고 지정하나, 중괄호안에 똑같은 이름의 변수의 50을 넣으면

50이 출력된다.

그때 100을 출력하고 싶으면 ::을 a앞에 붙여서 사용한다.


#include <stdio.h>

int a=100;전역변수


int main()

{

int a=50;중괄호내부에서의 선언.


printf("%d\n", a); -50이 출력

printf("%d\n", ::a); - 100이 출력.


return 0;

}


#include <iostream>
using namespace std;

namespace SAM_1
{
  int a=100;
}

namespace SAM_2
{
  int b=200;
}

int main()
{
  using namespace SAM_1;// using을 붙여서 아래 코드에 std::를 붙일 필요가 없다.
  using namespace SAM_2;
  
  cout << "SAM_1의 a: " << a << endl;
  cout << "SMA_2의 b: " << b << endl;

  return 0;
}

위 소스는 namespace에 관한 또 다른 예제.


main()함수 위에 namespace SAM_1, SMA_2라고 각각 만든 다음 아래 MAIN()함수로 코드를 작성하면 

각가 a=100, b = 200이 출력이 된다.


그러나, namesapce SAM_2에 변수 b를 a로 바꾼다면 어떻게 될까?


그러면 에러 혹은 warning을 컴파일러가 띄우게 된다.


namespace는 변수를 중복해서 사용할 수 없다. 지정된 멤버가 sam_1의 것인지, sam_2의 멤버인지 모호하기 때문이다.