宏在程序预处理阶段完成替换,namespace是在编译的阶段生效,所以宏与namespace无关,即在namespace内部和外部同样生效,所以不能使用名字空间来定义宏的使用范围。或者这个也是c++不提倡使用宏的原因。
#include<stdio.h>
namespace TEST {
#define MAX_NUM 1024
}
int main()
{
printf("max num is%d\n", MAX_NUM);
return 0;
}
可以写下面的小程序测试下,不需要namespace可以访问到宏。
通过查看预编译结果g++ -E main.cpp -o main.txt,可以看到命名空间内部已经为空,替换为1024.
namespace TEST {
}
int main()
{
printf("max num is %d\n", 1024);
return 0;
}
原文:http://blog.csdn.net/daofengliu/article/details/23380595