C 第一篇关键字以及命名空间,命名关键字参数
墨初 知识笔记 79阅读
作者简介 RO-BERRY
学习方向致力于C、C、数据结构、TCP/IP、数据库等等一系列知识
日后方向 : 偏向于CPP开发以及大数据方向欢迎各位关注谢谢各位的支持
目录 前言 1. C关键字(C98)2. 命名空间

前言
C是在C的基础之上容纳进去了面向对象编程思想并增加了许多有用的库以及编程范式等。熟悉C语言之后对C学习有一定的帮助本章节主要目标

域方面、IO方面、函数方面、指针方面、宏方面等。为后续类和对象学习打基础 1. C关键字(C98)
C总计63个关键字C语言32个关键字
ps下面我们只是看一下C有多少关键字不对关键字进行具体的讲解。后面我们学到以后再细讲。
在C/C中变量、函数和后面要学到的类都是大量存在的这些变量、函数和类的名称将都存在于全局作用域中可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化以避免命名冲突或名字污染namespace关键字的出现就是针对这种问题的
先来写一段简单C代码
进入一个语言世界肯定是从hello world开始啦
作为对比先来C语言版本的
#include<stdio.h>int main(){ printf(hello world); return 0;}
再来看C版本
#include<iostream>using namespace std;int main(){ cout<<hello world<<endl; return 0;}
我们都知道在C语言文件中源文件后缀都是.c
但是在.cpp文件里这两个代码都可以运行
输出结果都是
hello world
可是我们的头文件以及输出方式却完全不一样
C首先兼容C语言的知识C语言的知识在C都可以用
C还有面向对象泛型以及对C语言不足的弥补
接下来我们正式介绍C语言的基础
就是这个头文件以及下面using namespace std这都是什么还有这输出方式怎么看不懂
我们先来看一个例子
#include<stdio.h>int rand 0;int main(){ printf(hello world); printf(%d,rand); return 0;}
这个时候运行非常成功
我们将代码改一下
你会发现只是添加了一个头文件
#include<stdio.h>#include<stdlib.h>int rand 0;int main(){ printf(hello world); printf(%d,rand); return 0;}
这个时候运行会出错
看报错我们发现出现的是命名冲突
rand重定义了
命名冲突主要分为
这种命名冲突在C语言中的经典的问题项目越大我们会出现命名冲突就会越多
c中就出现了命名空间 —> namespace
接下来我们来看namespace的用法
定义一个命名空间
#include<stdio.h>#include<stdlib.h>namespace bay{ int rand 0;}int main(){ printf(hello world); printf(%d,rand); return 0;}
我们会发现运行成功了
命名空间就相当于一堵墙将rand围起来了我们就会访问不到系统会去找那个全局rand在这里全局的rand是一个函数名系统就会出现提醒提示不要这样使用
那我们如何访问我们命名空间里面的rand呢
#include<stdio.h>#include<stdlib.h>namespace bay{ int rand 0;}int main(){ printf(hello world); printf(%d,bay::rand); return 0;}
我们在rand前加入我们的名字bay::
名称后面的冒号叫做域作用限定符
这样我们就可以随便进行重复命名变量还可以访问我们需要的变量
以后如果想避免冲突就可以采用这种方式了
如果在自己定义的命名空间出现命名冲突怎么办
我们能想到的开发者也能想到所以我们在命名空间里可以嵌套命名空间可以无限套娃
提示我们在同一个文件定义命名空间以及多个文件中国定义命名空间如果名称相同编译器会认为是一个命名空间不会发生冲突反而会将他们合并哦
那我们想使用自己定义的命名空间再使用其中的内容是不想带那个前缀应该怎么办
我们在头文件下面加上 using namespace 【命名空间名称】;
这样我们就可以随便使用如果使用和里面的空间相同名称的变量我们就会默认使用这个命名空间定义的变量不需要加前缀。
现在我们回到一开始using namespace std;
这句话的意思就是我们的代码就是在使用std命名空间里面的内容
所以我们使用其中的东西就不用再带上std::这个前缀
std是c官方库定义的命名空间
#include<iostream> --->>头文件 输入输出流int main(){ std::cout<<hello world; -->>C语言的移位运算符C的流插入运算符 --->>没有带命名空间使用 要加前缀 int a10; double b11.11; std::cout<<a; std::cout<<b; -->>C能自动识别输出的变量类型 std::cout<<a<<b<<\n std::cout<<a<<b<<std::endl; -->>C可以连续输出endl相当于C语言里面的\n在这里等同于换行,endl是C里面自定义的换行符 return 0;}
我们每次指定命名空间很不方便但是将命名空间全部展开又有冲突的风险
我们采用指定展开可以解决问题
using std::cout;
using std::endl;
这两个变量就被展开了在内容里就不用加前缀了
我们就可以指定展开想要的变量或者函数都可以这样我们的程序就可以变的非常的方便了
我们C语言里面的scanf
在C里面就是std::cin,又叫做流提取