#include <stdio.h>
#include <cstdio>
// 命名空间的定义:定义一块命名空间,名字叫 NameA
namespace NameA
{
// 原来全局空间可以做的事情,命名空间都可以做:定义变量、函数、宏、结构体、枚举....
int g_a;
int g_b;
int add(int a, int b)
{
return a+b;
}
namespace AA {
int g_c;
}
}
namespace NameB
{
int g_a;
int sub(int a, int b)
{
return a-b;
}
}
using namespace NameA;
int g_b; // 全局的g_b
// 命名空间的使用
// 1、通过命名空间名字和 域解析符(::) 引用空间中的成员
int main1()
{
NameA::g_a = 10;
printf ("1+2 = %d\n", NameA::add(1,2));
printf ("NameB::g_a = %d\n", NameB::g_a);
return 0;
}
// 2、通过 using 声明来使用整个命名空间
// using 声明只在当前作用域有效
int main2()
{
using namespace NameA; // 开启命名空间NameA,之后使用NameA中的成员不用再加域解析符
// using namespace NameB;
g_a = 10; // 用的 NameA 的 g_a
printf ("1+2 = %d\n", add(1,2)); // 使用的是 NameA 的add
printf ("NameA::g_a = %d\n", NameA::g_a);
printf ("NameB::g_a = %d\n", NameB::g_a);
return 0;
}
// 3、通过 using 声明来使用命名空间中的某个成员
int main3()
{
using NameA::add; // 之后使用 NameA 的add 不需要再加域解析符
printf ("1+2 = %d\n", add(1,2)); // 使用的是 NameA 的add
// printf ("g_a = %d\n", g_a);
return 0;
}
// 4、默认命名空间使用
int main()
{
using namespace NameA;
NameA::g_b = 10;
// 默认命名空间成员直接用域解析符 :: 来引用
::g_b = 20;
NameA::AA::g_c = 10;
return 0;
}