靖江网站,整站排名优化公司,wordpress火车头插件防重复,wordpress+任意下载1、为什么c要在c语言上增添命名空间的概念 在c语言中#xff0c;定义的全局变量与库中相同#xff0c;或者和别人代码结合的时候可能存在相同的命名#xff0c;此时就会命名冲突。c语言是没有办法很好的解决这个问题的。
假设这样一种情况#xff0c;当一个班上有两个名叫… 1、为什么c要在c语言上增添命名空间的概念 在c语言中定义的全局变量与库中相同或者和别人代码结合的时候可能存在相同的命名此时就会命名冲突。c语言是没有办法很好的解决这个问题的。
假设这样一种情况当一个班上有两个名叫 Zara 的学生时为了明确区分它们我们在使用名字之外不得不使用一些额外的信息比如他们的家庭住址或者他们父母的名字等等。
同样的情况也出现在 C 应用程序中。例如您可能会写一个名为 xyz() 的函数在另一个可用的库中也存在一个相同的函数 xyz()。这样编译器就无法判断您所使用的是哪一个 xyz() 函数。因此引入了命名空间这个概念专门用于解决上面的问题它可作为附加信息来区分不同库中相同名称的函数、类、变量等。使用了命名空间即定义了上下文。本质上命名空间就是定义了一个范围。 全 2、如何定义命名空间 ::域作用限定符 把作用域限定在全局左边没有或者空格都行默认就是全局如果过你左边写了名字那么就是就是命名空间的域。namespace{}就是命名空间的用法。
#include stdio.h
#include stdlib.h
int rand 10;
// C语言没办法解决类似这样的命名冲突问题所以C提出了namespace来解决
int main()
{printf(%d\n, rand);return 0;
}
// 编译后后报错error C2365: “rand”: 重定义以前的定义是“函数”局部变量和局部变量可以重名函数里面优先使用局部变量找不到才是全局变量。
#include stdio.hint a 2;
void fu()
{int a 1;printf(%d, a);//1printf(%d,::a);//2
}
命名空间的定义
// bit是命名空间的名字一般开发中是用项目名字做命名空间名。
// 我们上课用的是bit大家下去以后自己练习用自己名字缩写即可如张三zs// 1. 正常的命名空间定义
namespace bit
{// 命名空间中可以定义变量/函数/类型int rand 10;int Add(int left, int right){return left right;}struct Node{struct Node* next;int val;};
}
//2. 命名空间可以嵌套
// test.cpp
namespace N1
{
int a;
int b;
int Add(int left, int right){return left right;}
namespace N2{int c;int d;int Sub(int left, int right){return left - right;}}
}
//3. 同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。
// ps一个工程中的test.h和上面test.cpp中两个N1会被合并成一个
// test.h
namespace N1
{
int Mul(int left, int right){return left * right;}
}定义了命名空间里面的变量不能直接使用。
namespace bit
{// 命名空间中可以定义变量/函数/类型int a 0;int b 1;int Add(int left, int right){return left right;}struct Node{struct Node* next;int val;};
}
int main()
{// 编译报错error C2065: “a”: 未声明的标识符printf(%d\n, a);
return 0;
}总结 各个文件链接展开后如果重名也会报错c语言无法解决这个问题 于是在c基础上添加了命名空间域只影响使用不影响生命周期。 多个文件中命名空间的名字可以一样他们会合并但是里面的变量名字你就不能一样了你要一样的就只能改成两个命名空间。或者可以在命名空间里面再嵌套一层命名空间访问时两个符号就可以了。 std是c标准库的命名空间using namespace std就是全局展开一般不建议这样。 3、使用命名空间的三种方式 1、制定命名空间访问std::
int main()
{printf(%d\n, N::a);return 0;
}2、全局展开using namespace std,一帮不建议全局展开
using namespce N;
int main()
{printf(%d\n, N::a);printf(%d\n, b);Add(10, 20);return 0;
}3、常用部分展开 using std:: cout
using N::b;
int main()
{printf(%d\n, N::a);printf(%d\n, b);return 0;
}