一些可以做翻译的网站,网站策划推广方案,doc导入wordpress,徐州网站建设电话前言 在C语言和基本的数据结构学习之后#xff0c;我们终于迎来了期待已久的C啦#xff01;C发明出来的意义就是填补一些C语言的不足#xff0c;让我们更加方便的写代码#xff0c;所以今天我们就来讲一下C语言不足的地方和在C中的解决办法#xff01; 一、命名空间 在学习…
前言 在C语言和基本的数据结构学习之后我们终于迎来了期待已久的C啦C发明出来的意义就是填补一些C语言的不足让我们更加方便的写代码所以今天我们就来讲一下C语言不足的地方和在C中的解决办法 一、命名空间 在学习命名空间这个概念之前我们先来看下面这段代码 在这段代码中我们定义了一个rand变量但是我们还知道rand又是stdlib这个头文件里面的函数名理应来说应该会命名冲突的但是我们不要忘了这里的变量rand是局部变量当命名冲突的时候会优先调用局部变量所以下面程序会正常打印4 那什么情况下会命名冲突呢我们接着往下看 #include stdio.h
#include stdlib.h
int main()
{int rand 4;printf(%d\n,rand);return 0;
} 看这段代码当我们把rand定义成全局变量的时候就会产生命名冲突了这个程序无法正常执行下去了那就会有小面包们问作者喜欢叫读者为小面包我们难道不可以自己来避免这个命名冲突的问题吗就不用函数名就得了可是大家想想库里面很多函数我们无法保证在未来写代码的时候定义的变量名一定不跟函数名冲突所以这个时候我们的命名空间这个概念就诞生了那就让我们开始学习C的第一课----命名空间吧 #include stdio.h
#include stdlib.h
int rand 4;
int main()
{printf(%d\n,rand);return 0;
}
二、命名空间的概念 我们的命名空间其实就是给我们定义的变量围上一堵墙我们需要用的时候就可以去调用这个命名空间这跟我们C语言的结构体类似就是把这些变量划分到命名空间里了防止跟外面的产生命名冲突。也像给变量贴上个标签告诉程序这个是我的不是函数名 三、命名空间的定义 我们还需要知道在C里面是可以写C的程序的来一起看下面这段代码命名空间的关键字就是namespace后面再加上命名空间的名字就是起个名字随便起推荐大家起名字的缩写表明这里面的变量都是自己的那我们定义完命名空间之后该如何调用呢 #include iostream // C里面的标准输入输出库
#include stdio.h // C的标准输入输出
namespace xmb
{int rand 3;
}
int main()
{printf(%d\n,xmb::rand);return 0;
}
四、 命名空间的内容 命名空间里面可以放变量和函数体结构体联合体等数据类型使用的时候就用上面的调用规则就可以了 #include iostream
namespace xmb
{int rand 12;int Add(int x, int y){return x y;}struct List{int a;int b;char c;};union room{int a;int b;char c;};
}
int main()
{xmb::rand 3;int num xmb::Add(3,5);struct xmb::List la {1,2,a};la.b 3;la.c 4;la.c b;union xmb::room uroom {3};uroom.a 4;uroom.b 3;uroom.c a;return 0;
}
五、命名空间的嵌套 我们的命名空间是可以嵌套的我们可以嵌套多个命名空间在调用的时候就依次来就可以。 namespace xmb
{int rand 12;namespace xmb1{int Add(int x, int y){return x y;}namespace xmb11{int num 10;}}namespace xmb2{struct List{int a;int b;char c;};}namespace xmb3{union room{int a;int b;char c;};}
}
int main()
{xmb::xmb1::xmb11::num 20;return 0;
}
六、命名空间在多文件中的应用 既然命名空间如此的好用那它在多文件中是否可以应用呢 答案是可以的但是也有限制规则 头文件
#include iostreamnamespace xmb
{typedef struct List{int* data;int size;int capacity;}SL;void SLInit(SL* phead);void SLPush(SL* phead,int num);
}
函数体
#include test.h
namespace xmb
{void SLInit(SL* phead){phead-data nullptr;phead-size 0;phead-capacity 0;}void SLPush(SL* phead,int num ){//}
} 我们在多文件的时候命名空间一定要保持一致 同一个程序中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。 比如上面的test.h和上面test.cpp中两个xmb会被合并成一个。 七、命名空间的调用方式
1. 命名空间名称 ➕ :: ➕ 变量名 如图我们需要调用rand这个变量只需要如下的调用我们就可以使用了再也不用担心会命名冲突了 注意⚠️ 只要是跟库里面的函数名冲突了就用这种方法其他两种解决不了 #include iostream // C里面的标准输入输出库
#include stdio.h // C的标准输入输出
namespace xmb
{int rand 3;
}
int main()
{printf(%d\n,xmb::rand);return 0;
}
2. using➕命名空间名称➕::➕变量名
#include iostream // C里面的标准输入输出库
#include stdio.h // C的标准输入输出
namespace xmb
{int a 3;int b 6;
}
using xmb::a;
int main()
{printf(%d\n,a);printf(%d\n,xmb::b);return 0;
}
3. using namespace ➕ 命名空间名称 这个主要就是引入了命名空间写完这个就可以直接调用命名空间里面的内容 #include iostream // C里面的标准输入输出库
#include stdio.h // C的标准输入输出
namespace xmb
{int a 3;int b 6;
}
using namespace xmb;
int main()
{printf(%d\n,a);printf(%d\n,b);return 0;
}
八、C中的输入输出 大家在学习完命名空间之后肯定会想C的输入输出还是跟C语言的一样吗还是有自己更好的输入输出语句 答案是有更好的接下来我们就介绍C的输入输出 1. cout :类似C语言中的printf函数是标准的输出到控制台/终端上
2. cin :类似C语言中的scanf函数是标准的输入从键盘上输入到变量。
3. :流插入运算符配合cout使用
4. :流提取运算符配合cin使用
5. endl :特殊的C符号表示换行输出 我们的coutcin和endl都在std这个命名空间里而std命名空间在iostream这个头文件里所以我们要使用的时候必须同时调用std和iostream它们两个。 8.1 cout的使用 这里就代表从右往左依次流入到cout控制台/终端上先输出hello world 再输出换行 #include iostream
using namespace std;
int main()
{cout hello world endl;return 0;
}
8.2 cin的使用 cin这里就是从左往右依次输入输入第一个值给a空格或者换行输入第二个值给b #include iostream
using namespace std;
int main()
{int a 0;int b 0;cin a b;cout a endl b endl;return 0;
} 注意⚠️ 使用C输入输出更方便不需要像printf/scanf输入输出时那样需要手动控制格式。 C的输入输出可以自动识别变量类型 #include iostream
using namespace std;
int main()
{int a 0;double b 0;char c 0;cin a b c;cout a endl b endl c endl;return 0;
} 九、std命名空间的使用惯例 std是C标准库的命名空间如何展开std使用更合理呢 1. 在日常练习中建议直接using namespace std即可这样就很方便。 #include iostream
using namespace std;
int main()
{int a 0;double b 0;char c 0;cin a b c;cout a endl b endl c endl;return 0;
} 2.但是 using namespace std 展开标准库就全部暴露出来了如果我们定义跟库重名的类型/对象/函数就存在冲突问题。 该问题在日常练习中很少出现但是项目开发中代码较多、规模大就很容易出现。 所以我们不要展开全部仅仅引用coucin和endl就可以了 #include iostreamusing std::cout;
using std::cin;
using std::endl;int main()
{int a 0;double b 0;char c 0;cin a b c;cout a endl b endl c endl;return 0;
}