重庆万州网站建设找谁,备案的网站建设书是什么意思,安徽网站备案,上网行为管理系统个人主页 #xff1a; zxctsclrjjjcph 文章封面来自#xff1a;艺术家–贤海林 如有转载请先通知 文章目录 1. 前言2. C关键字3. 命名空间3.1 命名空间定义3.2 命名空间的使用 4. C输入输出 1. 前言
C是在C的基础之上#xff0c;容纳进去了面向对象编程思想#xff0… 个人主页 zxctsclrjjjcph 文章封面来自艺术家–贤海林 如有转载请先通知 文章目录 1. 前言2. C关键字3. 命名空间3.1 命名空间定义3.2 命名空间的使用 4. C输入输出 1. 前言
C是在C的基础之上容纳进去了面向对象编程思想并增加了许多有用的库以及编程范式等。来为学习C类和对象打下基础。
2. C关键字
C总计63个关键字C语言32个关键字 只是看一下C有多少关键字不对关键字进行具体的讲解。后面用到关键字在细节化。
3. 命名空间 在C/C中变量、函数和后面要学到的类都是大量存在的这些变量、函数和类的名称将都存在于全局作用域中可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化以避免命名冲突或名字污染namespace关键字的出现就是针对这种问题的。 来先看个例子
#include stdio.h
#include stdlib.h
int rand 10;int main()
{printf(%d\n, rand);return 0;
}这里出现报错原因就是重定义。就是命名冲突。
如果在公司里面两个程序员用c语言做一个项目不同的部分但是两个程序员做的部分有同名函数和变量 那么合并的时候那么谁改呢 这个命名冲突问题在c语言中是一直存在的那么c是怎么解决的呢
C里面的域作用限定符(::) C的域有全局域局部域命名空间域类域。 先来谈谈命名空间域。
3.1 命名空间定义
定义命名空间需要使用到namespace关键字后面跟命名空间的名字然后接一对{}即可{}中即为命名空间的成员。 来看个例子
#include stdio.h
namespace A
{int x 0;
}
namespace B
{int x 0;
}
int main()
{printf(%d\n, x);printf(%d\n, x);
} 编译器用一个变量或者函数的时候会先进行搜索第一步搜索的是当前局部域第二步是全局域还有第三步如果指定了直接就从指定域搜索。如果这两个域中都搜索不到就会报错就行上面例子中的原因一样未声明标识符。
如果我们想访问不同域里面的x怎么办呢 这时就用到上面提到的域作用限定符(::)
#include stdio.h
namespace A
{int x 0;
}
namespace B
{int x 1;
}
int main()
{printf(%d\n, A::x);printf(%d\n, B::x);
}此时就不会报错了。 将刚开始c语言中命名冲突的代码用了域作用限定符(::)就不会再报错了。
命名空间中可以定义变量/函数/类型
namespace bit
{int rand 10;int Add(int left, int right){return left right;}struct Node{struct Node* next;int val;};
}int main()
{printf(%d\n, bit::Add(1,2));struct bit::Node phead;return 0;
}命名空间可以嵌套
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;}}
}同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。 std是所有C库的命名空间 当指定代码中没有std时就报错了。 当把命名空间库打开就能直接用不用指定命名空间了。
3.2 命名空间的使用
命名空间中成员该如何使用呢 就像上面的代码一样
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()
{printf(%d\n, a);return 0;
}这个在上面已经说明过了就是未声明标识符。 命名空间的使用有三种方式
加命名空间名称及作用域限定符在上面已经提到了。 使用using将命名空间中某个成员引入 使用using namespace 命名空间名称 引入
4. C输入输出
C是如何来实现问候的 来看看代码
#includeiostream
using namespace std;
int main()
{cout Hello world!!! endl;return 0;
}说明
使用cout标准输出对象(控制台)和cin标准输入对象(键盘)时必须包含 iostream 头文件以及按命名空间使用方法使用std。cout和cin是全局的流对象endl是特殊的C符号表示换行输出他们都包含在包含 iostream 头文件中。是流插入运算符是流提取运算符。使用C输入输出更方便不需要像printf/scanf输入输出时那样需要手动控制格式。C的输入输出可以自动识别变量类型。实际上cout和cin分别是ostream和istream类型的对象和也涉及运算符重载等知识 这些知识我们我们后续才会学习所以我们这里只是简单学习他们的使用。之后深入的学习IO流用法及原理。
注意早期标准库将所有功能在全局域中实现声明在.h后缀的头文件中使用时只需包含对应头文件即可后来将其实现在std命名空间下为了和C头文件区分也为了正确使用命名空间规定C头文件不带.h旧编译器(vc 6.0)中还支持iostream.h格式后续编译器已不支持因此推荐使用iostreamstd的方式。 举个例子
#include iostream
using namespace std;
int main()
{int a;double b;char c;// 可以自动识别变量的类型cin a;cin b c;cout a endl;cout b c endl;return 0;
}关于cout和cin还有很多更复杂的用法比如控制浮点数输出精度控制整形输出进制格式等等。因为C兼容C语言的用法这些又用得不是很多。
std命名空间的使用惯例 std是C标准库的命名空间如何展开std使用更合理呢
在日常练习中建议直接using namespace std即可这样就很方便。using namespace std展开标准库就全部暴露出来了如果我们定义跟库重名的类型/对象/函数就存在冲突问题。该问题在日常练习中很少出现但是项目开发中代码较多、规模大就很容易出现。所以建议在项目开发中使用像std::cout这样使用时指定命名空间 using std::cout展开常用的库对象/类型等方式。
之后会继续分享与C有关内容大家多多关注。 如果有问题请指出大家一起进步