c++ namespace_c++语法2、c执行命名空间输入输出
C++ c执行-命名空间-输入输出
编译及运行c++程序
C++ 和C语言类似,也要经过编译和链接后才能运行。VS、Dev C++、VC 6.0、Code::Blocks、C-Free、GCC、Xcode 等常见 IDE 或编译器,它们除了可以运行C语言程序,还可以运行 C++ 程序,步骤是一样的。
> C/C++ 代码生成可执行文件的过程:
参考文献:(https://blog.csdn.net/weibo1230123/article/details/82781284)
Linux-G++ 命令:
使用gcc命令可以在命令行便捷操作c++的程序,这里采用linux gcc的基本语法简单介绍。
gcc 与 g++ 分别是 gnu 的 c & c++ 编译器 gcc/g++ 在执行编译工作的时候,总共需要4步:
1、预处理,生成 .i 的文件[预处理器cpp]
2、将预处理后的文件转换成汇编语言, 生成文件 .s [编译器egcs]
3、有汇编变为目标代码(机器代码)生成 .o 的文件[汇编器as]
4、连接目标代码, 生成可执行程序 [链接器ld]
使用gcc
命令来编译和链接C程序。例如编译单个源文件:
gcc main.c
编译多个源文件:
gcc main.c module.c
编译C++程序时,gcc
命令也可以使用,不过要增加**-lstdc++
**选项,否则会发生链接错误。例如编译单个源文件:
gcc main.cpp -lstdc++
编译多个C++源文件:
gcc main.cpp module.cpp -lstdc++
gcc
命令在链接时默认使用C的库,只有添加了-lstdc++
选项才会使用 C++ 的库。不过 GCC 中还有一个g++
命令,它专门用来编译 C++ 程序,广大 C++ 开发人员也都使用这个命令。g++
命令和gcc
命令的用法如出一辙,例如编译单个源文件:
g++ main.cpp
参数表
参数 | 执行效果 |
---|---|
-c | 只激活预处理,编译,和汇编,也就是他只把程序做成obj文件 |
-S | 只激活预处理和编译,就是指把文件编译成为汇编代码。 |
-E | 只激活预处理,这个不生成文件, 你需要把它重定向到一个输出文件里面。 |
-o | 制定目标名称, 默认的时候, gcc 编译出来的文件是 a.out |
-pipe | 使用管道代替编译中临时文件, 在使用非 gnu 汇编工具的时候, 可能有些问题。 |
更多参数参见:https://www.runoob.com/w3cnote/gcc-parameter-detail.html
C++ 命名空间
C++应用程序中可能正在编写一些具有名为x()函数的代码,并且还有另一个可用的库,它也具有相同的x()函数。现在编译器无法知道代码中引用的x()函数的哪个版本。名称空间(namespace)被设计来克服这个困难,并被用作额外的信息来区分类似的函数、类、变量等等,它们在不同的库中具有相同的名称。可以定义定义名称的上下文。本质上,名称空间定义了一个范围。
namespace定义
在C语言中只有一个全局作用域:
C语言中所有的全局标识符共享一个作用域 标识符之间可能发生冲突
C++中提出了命名空间的概念:
1.命名空间将全局作用域分成不同的部分,
2.不同命名空间中的标识符可以同名而不会发生冲突 3.命名空间可以发生嵌套
4.全局作用域也叫默认命名空间
语法如下:
namespace Name{ namespace Internal { /*...*/ } /*...*/}// name是命名空间的名字,它里面可以包含变量、函数、类、typedef、#define 等,最后由一对{}包围。
举个栗子:
小郭与
而解决方法则是定义一个命名空间:
namespace guo{ //小郭 FILE aaa = NULL;}namespace jia{ //小嘉 FILE aaa = NULL;}
使用namespace
使用namespace时需要使用双冒号这个新的符号:::
,称为域解析操作符,在C++中用来指明要使用的命名空间。
如上述例子:
guo::aaa = fopen("a.txt", "r"); //使用小guo定义的变量jia::aaa = fopen("b.txt", "rb+"); //使用小jia定义的变量
除了直接使用域解析操作符,还可以采用using
关键字声明,例如:
using guo::aaaaaa = fopen("a.txt", "r"); //使用小guo定义的变量jia::aaa = fopen("b.txt", "rb+"); //使用小jia定义的变量
其意思就是先抢占一个优先使用的命名空间,也可以使用using namespace guo
对该命名空间整个定义。
命名空间内部不仅可以声明或定义变量,对于其它能在命名空间以外声明或定义的名称,同样也都能在命名空间内部进行声明或定义,例如类、函数、typedef、#define 等都可以出现在命名空间中。站在编译和链接的角度,代码中出现的变量名、函数名、类名等都是一种符号(Symbol)。有的符号可以指代一个内存位置,例如变量名、函数名;有的符号仅仅是一个新的名称,例如 typedef 定义的类型别名。
如下例子:
#include //将类定义在命名空间中namespace one{ class Student{ public: char *name; int age; public: void say(){ printf("%s的虚假年龄是 %d\n", name, age); } };};namespace two{ class Student{ public: char *name; int age; public: void say(){ printf("%s的真实年龄是 %d\n", name, age+20); } };}int main(){ one::Student stu1; char* name1 = (char*)"guojia"; stu1.name = name1; stu1.age = 2; stu1.say(); two::Student stu2; char* name2 = (char*)"guojia"; stu2.name = name2; stu2.age = 2; stu2.say(); return 0;}
std 命名空间及头文件
因为早期的 C++ 还不完善,不支持命名空间,没有自己的编译器,而是将 C++ 代码翻译成C代码,再通过C编译器完成编译。这个时候的 C++ 仍然在使用C语言的库,stdio.h、stdlib.h、string.h 等头文件依然有效;此外 C++ 也开发了一些新的库,增加了自己的头文件,例如:
iostream.h:用于控制台输入输出头文件。
fstream.h:用于文件操作的头文件。
complex.h:用于复数计算的头文件。
和C语言一样,C++ 头文件仍然以.h
为后缀,它们所包含的类、函数、宏等都是全局范围的。后来 C++ 引入了命名空间的概念,计划重新编写库,将类、函数、宏等都统一纳入一个命名空间,这个命名空间的名字就是std
。std 是 standard 的缩写,意思是“标准命名空间”。
但是这时已经有很多用老式 C++ 开发的程序了,它们的代码中并没有使用命名空间,直接修改原来的库会带来一个很严重的后果:程序员会因为不愿花费大量时间修改老式代码而极力反抗,拒绝使用新标准的 C++ 代码。
C++ 开发人员想了一个好办法,保留原来的库和头文件,它们在 C++ 中可以继续使用,然后再把原来的库复制一份,在此基础上稍加修改,把类、函数、宏等纳入命名空间 std 下,就成了新版 C++ 标准库。这样共存在了两份功能相似的库,使用了老式 C++ 的程序可以继续使用原来的库,新开发的程序可以使用新版的 C++ 库。
为了避免头文件重名,新版 C++ 库也对头文件的命名做了调整,去掉了后缀.h
,所以老式 C++ 的iostream.h
变成了iostream
,fstream.h
变成了fstream
。而对于原来C语言的头文件,也采用同样的方法,但在每个名字前还要添加一个c
字母,所以C语言的stdio.h
变成了cstdio
,stdlib.h
变成了cstdlib
。
对于原来C语言的头文件,即使按照 C++ 的方式来使用,即#include
这种形式,那么符号可以位于命名空间 std 中,也可以位于全局范围中。
使用命名空间 std:
#include int main(){ std::printf("guojia"); return 0;}
不使用命名空间 std:
#include int main(){ printf("郭嘉"); return 0;}
正常情况下这两种写法都可以使用,但是出现一些函数的冲突的时候,编译将失效。在 Microsoft Visual C++ 和 GCC 下都能够编译通过,也就是说,大部分编译器在实现时并没有严格遵循C++标准,它们对两种写法都支持,可以使用 std 也可以不使用。
一般情况下使用c++头文件会更灵活
输入输出
C中,通常会使用 scanf 和 printf 来对数据进行输入输出操作。在C++语言中,C语言的这一套输入输出库我们仍然能使用,但是 C++ 又增加了一套新的、更容易使用的输入输出库.
cin为c++获取键盘的函数,cout为c++输出的语句。
如下:
#includeusing namespace std;int main( ){ char name[50]; cout << "请输入您的名称:"; cin >> name; cout << "您的名称是:" << name << endl;}
注意的是,cout 和 cin 都是 C++ 的内置对象,而不是关键字。C++ 库定义了大量的类(Class),程序员可以使用它们来创建对象,cout 和 cin 就分别是 ostream 和 istream 类的对象,只不过它们是由标准库的开发者提前创建好的,可以直接拿来使用。这种在 C++ 中提前创建好的对象称为内置对象。
使用 cout 进行输出时需要紧跟<<
运算符,使用 cin 进行输入时需要紧跟>>
运算符,这两个运算符可以自行分析所处理的数据类型,因此无需像使用 scanf 和 printf 那样给出格式控制字符串。
连续输入
#includeusing namespace std;int main(){ char x[50]; float y; cout<<"你的名字和年龄分别是:"<<endl; cin>>x>>y; cout<<"你的名字是"<endl; cout<<"你的年龄是"<endl; return 0;}
使用编辑器 dev cpp 5.11
图 | 郭嘉
文 | 郭嘉
扫码关注桔梗与少年
微信号 : if-u-remembers
新浪微博:桔梗与少年
c++ namespace_c++语法2、c执行命名空间输入输出相关推荐
- C++ C++基础语法入门总结(一)命名空间-输入输出-缺省参数-函数重载
C++基础语法入门总结 C++ 命名空间 如何定义和使用命名空间 C++ 输入与输出 C++ 缺省参数 C++函数重载 名字修饰 extern "c" 推荐阅读 C++ 命名空间 ...
- (P9)awk:什么是awk,awk简单用法,awk脚本语法,awk执行过程
文章目录 1.什么是awk 2.awk简单用法 3.awk脚本语法 4.awk执行过程 1.什么是awk awk 是什么 awk 是一种用于处理数据和生成报告的编程语言 awk 可以在命令行中进行一些 ...
- select语句的语法顺序和执行顺序
目录 1.语法顺序 2.执行顺序 3.优化方法 1.join 方面 2.where 方面 1.语法顺序 select语句的语法格式如下. select 字段列表 from 数据源 [ where条件表 ...
- DataQL之语法-万能查询执行步骤
万能查询执行步骤 引用包 <dependency><groupId>net.hasor</groupId><artifactId>hasor-dataq ...
- python输入输出姓名_python学习笔记-执行与输入输出
有同学问,能不能像.exe 文件那样直接运行.py文件呢?在 Windows 上是不行的,但是,在 Mac 和 Linux 上是可以的,方法是在.py文件的第一行加上一个特殊的注释: #!/usr/b ...
- 2.3Python基础语法(三)之输入输出
返回总目录 目录: 1.input输入 2.print输出 (一)input输入 1.input的处理方式 # 输入input string = input("请输入一个字符串:" ...
- js二维数组arr中表示读取第i行第j列的是:_c++ c语言 数组与字符串
c语法7 - 数组与字符串 概述 定义:把具有相同类型的若干变量按有序形式组织起来称为数组. C语言数组属于构造数据类型.一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型.因 ...
- XML概述、语法及常用操作
1. XML概述 关于XML的定义有以下几种说法: ① XML是可扩展标记语言(Extensible Markup Language)的缩写. ② XML是一种类似于HTML的标记语言. ③ XML是 ...
- PHP 命名空间(namespace)
2019独角兽企业重金招聘Python工程师标准>>> PHP 命名空间(namespace) PHP 命名空间(namespace)是在PHP 5.3中加入的,如果你学过C#和Ja ...
最新文章
- 熟悉交换机与路由器组网(图解)
- 网站添加到IIS和附件进程调试(新手使用篇)
- 防止程序多开的两种方法
- 信息系统项目管理师-招投标法、政府采购法核心知识点思维脑图
- 中国船级社船舶设计审核云平台
- 时间序列与R语言应用(part5)--移动平均MA模型及其可逆性
- C++ Makefile文件详解
- ajax respon有数据,Ajax怎么通过response在后台传递数据?(附代码)
- 初学者入门知识图谱必看的能力:推理
- Java Swing Mysql学生信息管理系统
- 运行gedit报No protocol specified
- HashMap在Jdk1.7和1.8中的实现
- es和oracle,Oracle和Elasticsearch数据同步
- hdoj 3376,2686 Matrix Again 【最小费用最大流】
- scrum 11.6
- 【报错】android.database.sqlite.SQLiteException: no such column: id (code 1): , while compiling: select
- Nginx 轻松搞定跨域问题!
- DDOS硬件防火墙DIY技术揭密
- android11怎么降级真我,安卓11怎么降回安卓10?安卓11降回安卓10相关操作步骤
- 对量子态和运算的一些基础认识
热门文章
- php mysql 服务器成本_php – 从mysql服务器访问和存储大量数据
- Think in Java第四版 读书笔记7第13章 字符串
- 2021-07-12 原来我用的是CPU,更改方法
- python以追加方式打开文件 线程安全吗_多线程追加文件,不加锁,会出现什么情况 ?...
- 酷安电脑版_2020年末 平板电脑购买推荐
- ios找不到信任证书_iOS 11 中可用的受信任根证书列表
- 应用优化前心路历程~
- idea如何自制插件_Lice IntelliJ插件图标制作过程
- 类写了package java命令出错_java/javac命令行如何同时引用多个包;错误 TypeError: 'JavaPackage' object is not callable 的含义...
- mysql currentuser_MySQL中DATABASE()和CURRENT_USER()函数的示例详解