钓鱼网站制作,高级服装定制网站,ui设计最好的培训机构,个人企业注册信息查询目录 1.创建第一个c项目 1.1项目创建 1.2 .cpp源文件建立 1.3 第一个c程序hello world对比c语言hello world 2.命名空间 2.1 C关键字 2.2 命名空间---解决c语言中的命名冲突 2.2.1 namespace命名空间用法 2.2.2 #xff1a;#xff1a; 预作用限定符 2.2.3 命名空间的嵌套… 目录 1.创建第一个c项目 1.1项目创建 1.2 .cpp源文件建立 1.3 第一个c程序hello world对比c语言hello world 2.命名空间 2.1 C关键字 2.2 命名空间---解决c语言中的命名冲突 2.2.1 namespace命名空间用法 2.2.2 预作用限定符 2.2.3 命名空间的嵌套 2.2.4 同命名空间的合并 2.2.5 命名空间的使用 2.2.5.1使用using namespace 命名空间名称 引入 2.2.5.2使用using将命名空间中某个成员引入 3.C的输入输出 3.1 C输出使用cout 3.2 c的输入 3.3 关于头文件 #include 4.结语 1.创建第一个c项目
1.1项目创建 1.2 .cpp源文件建立 1.3 第一个c程序hello world对比c语言hello world 二者不同的点 头文件不同这个可以理解因为可能包含了我们输出输出函数的不同要包含不同的头文件突兀的是这一行代码
using namespace std;
这个是什么含义呢有什么用是干什么的这是我们进入c的第一个问题。c语言是c语言生长起来的 兼容百分之九十的c语言所以我们在c中仍然可以使用c的代码 只是一些细节不兼容。c是面向对象的语言具有泛型弥补c语言的不足那么这个 using namespace std;
就是为了弥补c语言中一些命名冲突而诞生的我们称为命名空间。接下来我们就详细聊一下这个命名空间。
2.命名空间
2.1 C关键字
关键字(keyword)属于保留字是整个语言范围内预先保留的标识符。每个C关键字都有特殊的含义。经过预处理后关键字从预处理记号(preprocessing-token)中区别出来剩下的标识符作为记号(token)用于声明对象、函数、类型、命名空间等。不能声明与关键字同名的标识符。 namespace就是c中的一个关键字作用是解决命名冲突在C/C中变量、函数和后面要学到的类都是大量存在的这些变量、函数和类的名称将都存 在于全局作用域中可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化 以避免命名冲突或名字污染namespace关键字的出现就是针对这种问题的。不过如果命名空间冲突就没有办法了。
下面具体看一下
2.2 命名空间---解决c语言中的命名冲突 在C语言中我们写下这段代码
int rand 10;
int main()
{printf(%d\n, rand);return 0;
} 运行 rand是C语言中定义的一个库函数互相冲突统一叫做命名冲突 C语言没有办法解决这种问题只能改命名。 在我们输出的时候关于rand这个变量的定义我们的编译器会先到库函数头文件中寻找发现是一个库函数那么后续在遇到这个变量的定义就会报错。如果对于一个变量在库函数中找也没有找到就会到全局变量中找再到局部去找都没有就会报错这个变量没有定义
那么我们的c为了解决这个命名冲突的问题就使用了namespace这个关键字。
2.2.1 namespace命名空间用法 namespace 命名可以自己定义工程项目中一般是项目名 { //命名空间中可以是 //变量 //类型 //函数 } namespace std//墙把这个rand围起来了访问的就是全局的外面的就是//那个rand是函数名字不能使用%d打印就报错是一个指针,改成P%
{int rand 4;
}
namespace myadd
{int Add(int x, int y){printf(%d, x y);return x y;}struct Node{struct Node* next;int val;};
} 现在我们打印这个rand就没有冲突报错了但是由于此时我们自己定义的rand在命名空间中我们编译器会首先到库函数和全局变量中寻找定义不会访问到命名空间中的定义就不会发生冲突。rand是一个库函数的名字是一个指针是函数地址所以使用%p的形式打印。 2.2.2 预作用限定符
我们通过预作用限定符号来访问命名空间中的变量和内容方法如下 命名空间名内容 叫做预作用限定符号 值得注意的是命名空间中结构体的释放有些不一样
struct 空间名结构体成员 2.2.3 命名空间的嵌套
对于极端的情况比如自己定义的变量名和自己定义的变量名冲突这种时候可以使用命名空间的嵌套
namespace word
{//极端情况自己定义名字自己冲突怎么办int rand 6;//和上面冲突命名空间可以嵌套namespace word1{int rand 8;}} 2.2.4 同命名空间的合并
在一个文件中的多个位置或者多个文件中定义一个变量名的命名空间内容会合并同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。 不会冲突 多个文件或者同一文件的多个位置的同名空间编译器会合并在一个命名空间中。 2.2.5 命名空间的使用
第一种就是上面讲解的预作用限定符的展开方式不过如果每次都要这样写就会很麻烦:
2.2.5.1使用using namespace 命名空间名称 引入
如果说使用namespace是建一堵围墙将命名冲突的东西分为墙内和墙外的如果没有预作用限定符某认使用的就是墙外也就是命名空间外的。如果使用时 命名空间名内容 这样的格式使用的是墙内的。
如果使用using namespace 命名空间这种方式那么就相当于直接将墙推倒回到没有建围墙的时候也就是说这样在使用的时候是会有风险引起命名冲突的。 而我们的命名空间是为了防止重定义这样的错误当没有冲突的时候这样来使用是比第一种处处都要使用是更加方便的 using namespace ou;展开命名空间 小测试展开可以但是大的工程建议不展开 using namespace std std是官方库定义的命名空间展开就可以随便用了 但是不是随随便便的展开防止冲突工程项目这样不会展开项目开发中代码较多、规模 大就很容易出现。所以建议在项目开发中使用日常练习为了方便可以展开。 当上述两个都展开就是库和我们定义的都展开的话编译器会先到全局去找找不到在依次在我们的这两个展开中去找都找不到就报错如果在两个地方都找到就会报冲突的错误。 每次指定命令空间很麻烦但是展开又很危险有冲突风险那么我们就可以指定展开
2.2.5.2使用using将命名空间中某个成员引入
在main函数外部使用using 命名空间名内容后续使用这个内容可能会引发冲突相当于展开了这个内容。编译器还是会优先到全局变量中去找再到这个命名空间中找如果找到就会冲突 using std::cout;
using std::endl;
//using stu::rand;
int rand 10;int main()
{cout rand endl;
指定展开后后续就可以直接用了。
3.C的输入输出
c的输入输出前提
①std
std是C标准库的命名空间名C将标准库的定义实现都放到这个命名空间中
using nameplace std 也可以只单独展开
using std::cout
using std:: endl
②#includeiostream
在以前并没有命名空间这个概念而是将标准库功能定义在全局空间里并声明在iostream.h早期的C头文件中。但是由于标准库非常的庞大那么程序员在选择的类的名称或函数名时就很有可能和标准库中的某个名字相同。所以为了避免这种情况所造成的名字冲突就把标准库中的一切都放在一个名为std的命名空间中。后来C标准为了和C区别开也为了正确使用命名空间规定头文件不使用后缀.h即出现了现在的iostream头文件。 3.1 C输出使用cout cout是全局的流对象是流插入运算符在c语言中我们通常使用“\n”来实现换行操作在c中不仅仅可以使用“\n,还可以使用endl。且cout是自动识别类型的。
同样的由于c语言是c语言成长起来的同样支持c语言的语法也就是说支持我们使用printf这样的输出。
3.2 c的输入
scanf使用cin代替流提取自动识别类型是流提取运算符 3.3 关于头文件 #includeiostream
#includeiostream是包含在std中的std是C标准库的命名空间早期标准库将所有功能在全局域中实现声明在.h后缀的头文件中使用时只需包含对应 头文件即可后来将其实现在std命名空间下为了和C头文件区分也为了正确使用命名空间 规定C头文件不带.h旧编译器(vc 6.0)中还支持格式后续编译器已不支持因 此推荐使用std的方式。 使用cout标准输出对象(控制台)和cin标准输入对象(键盘)时必须包含 iostream 头文件 以及按命名空间使用方法使用std。 cout和cin是全局的流对象endl是特殊的C符号表示换行输出他们都包含在包含 iostream 头文件中。 是流插入运算符是流提取运算符。 使用C输入输出更方便不需要像printf/scanf输入输出时那样需要手动控制格式。 C的输入输出可以自动识别变量类型。 实际上cout和cin分别是ostream和istream类型的对象和也涉及运算符重载 4.结语
以上就是本期所有内容对于命名空间的讲解创作不易大家如果觉得还可以的话欢迎大家三连有问题的地方欢迎大家指正一起交流学习一起成长我是Nicn正在c方向前行的奋斗者数据结构内容持续更新中感谢大家的关注与喜欢。