当前课程知识点:基于Linux的C++ > 第一讲 C/C++基本语法元素 > 1.4 程序设计的基本流程 > LinuxCPP0104
接下来是程序基本设计的流程
它包括这样几个过程
我们要写一个程序
实际上要涉及到几个任务
第一个 我要编辑我的源代码
这个我们称之为源代码
源代码实际上包括源文件和头文件
最后它的输出结果就是源文件和头文件
我们源文件的名字就叫main.ccp
a.cpp
后缀的名字都是“.cpp”
表示C++文件
如果你后缀名字叫.c那表示它是c文件
不是C++的
编译器自动根据这个后缀的名字
来选择C++的编译还是C的编译
有些是这样做的
至于我们Linux下面看你选择
你使用gcc编译器还是g++编译器
头文件就是“.h” 或者没有“.h”
就是iostream
它就叫头文件
你编辑出来的结果就是这两个
任何一个文本编辑器都可以
接下来第二步 编译
编译出来的结果就是我们的目标文件
二进制的代码
然后把这些二进制的代码
按照一个可执行文件的特定格式
把它组装在一起
这个过程我们称之为链接
生成我们可执行文件
在此过程中
我们需要使用到那些函数库里面
抽取出来的那些二进制的目标代码
比如讲printf那样的函数目标代码
它就会和
我们的这个程序中的目标代码
链接在一起
形成我们的可执行文件
可执行文件然后运行
最后测试这个程序对不对
这就是程序设计的基本流程
你从这里面看
先编辑 后编译 再链接 最后测试
这是一个过程
你链接也可能出错
测试也可能出错 出错了倒腾回来
每一步都有可能出错
然后都有可能会反过头来重新编辑
然后编译 然后测试
在Linux下面这个操作系统会有点特殊
Linux系统下面不是说没有图形用户界面
有的 有很多图形用户界面
实际上是很炫的
你比如说有Ubuntu操作系统
还有SUSI 好多种
它那个界面都是有图形用户界面的
但是我们写C/C++的程序
大家仍然习惯于使用一个控制台
包括它的编译命令
如果你是在图形用户界面下面
可以使用它的窗口文本编译器
比如说gedit这样的编辑器
其它的文本编辑器也行
要么你就是在控制台下面
你就可以使用行文本编辑器
比如VI编辑器可以用
其它行文本编辑器也可以
不管怎么样
能够把代码编辑成文本文件
以后缀名字“.cpp”、“.h”
像这样的格式
来存储我们的源文件
和我们的头文件就OK了
做完了这个 然后我们就要编译
我们要编译C程序 就使用gcc
要编译C++程序 就使用g++
因为我们可能有的时候需要写C程序
有的时候需要写C++的程序
所以gcc和g++两个要区分开
你比如讲我写一个程序代码
这个程序代码叫main.cpp
就刚才那个文件
我把它写好了 保存
写了一个文件叫main.cpp
然后编译它
编译和链接动作就通过g++
它一步给你做完
编译没有问题就链接
用这个命令
“g++ main.cpp” 一回车
我这个程序没错 over 做完了
在这个目录下面
就会生成一个可执行文件的名字
那个文件的名字叫“a.out”
缺省就这个名字 你可以改
然后你在控制台下面
输入这个命令 执行它
注意 因为linux的可执行文件
是放在固定的目录下面的
我们当前目录往往不在可执行文件的
那个搜索路径上
所以要想执行当前目录下面的
这个“a.out”文件
那么你必须写“./a.out”
表示当前目录下面的这个a.out
然后一回车 它就执行了
Linux的目录结构是“/”
不是Windows下面那个“\”
同学们别用错了
这是一个非常重要的地方
我们后面会有演示
让大家有一个感性的认识
怎么在Linux下面进行C/C++程序设计
好 我们现在来看一下
怎么在Linux下编写我们的C++的程序代码
我们先通过刚才那两个例子
来给大家演示在Linux下面
进行C++程序开发的一些基本流程
我们首先打开gedit编辑器
在这里面创建一个新的文件
我们首先完成一个文件目录的构造
我们打开一个终端
然后创建一个目录
我们的hello world的目录
mkdir hello
Ok 创建好这个目录之后
回到文本编辑器
我们将这个文件名表示成main.cpp
然后在C++里 选择我们的hello
把这个cpp存到hello那个目录下面
现在我们开始编写程序代码
第一行包含头文件
然后我们空上一行
让整个程序看得更清晰
然后我们要使用using namespace std
使用我们的名空间std
此后是我们的主函数
编完了以后我们按ctrl + s保存
我们接下来
要做的一件事情就是要编译
回到控制台
首先我们要cd hello进入这个目录
然后看一下目录
看看文件已经在了
main.cpp
然后我们g++编译cpp
等到g++运行完毕
我们ls列出来
就可以看到它产生了
一个编译后的结果 就是a.out
然后我们就可以运行a.out
在Linux下面要用“./”然后a.out
因为它的可执行文件的目录
不包含我们当前路径
你一运行的话
它就会显示“Hello World!”这样的信息
你可以看到
我们要首先通过编辑
然后我们编译 链接 执行
按照这样模式去运行的
如果Linux的编译器
替我们生成那个可执行文件名字a.out
你不喜欢
你可以改变 用“-o”
比如g++ -o 名字就叫hello
小写的hello main.cpp
可以按照这个格式来输出
然后你一看
hello这个文件名字就出来了
当然你运行hello 它也一样
“Hello World!” 对吧
我把这个hello删掉
然后我们再演示一遍
如果是g++编译main.cpp
我刚才一开始忘了写“-o”啊
我放在后面写行不行啊
然后你看到 hello出来了
也就是说“-o hello”这个选项
和main.cpp参数顺序无关紧要
放在后面也行 放在前面也行
总之 你按照这样一个模式
就能够编译出可执行程序
这是我们程序一点错误都没有的时候
发生的情况
如果有错误的话
在这里面就会给出一个提示信息
然后我们回到我们编辑器里面修改它
现在我们看看我们的第二个例子
我们用一个新的文件名字还叫main.cpp
但是现在呢我们还要把它存在
C++(目录下面的子目录Add)里
我们要做的是输入两个整数
然后得到这两个整数的和嘛
编写我们的程序代码
当然我们仍然需要包含iostream这个头文件
需要包含这个头
然后我们使用名空间
然后main
对于这个题呢
我们需要定义三个量
因为我们要得到两个数
然后要把两者之和输出
我们首先得到第一个数
然后用cout输出提示信息
得到第二个数
现在我们完成求和
完成求和之后 输出我们的数据
加上空格会好看一些
仔细检查一下我们的代码
我们输入一个数
再输入一个数 求和
然后输出它的结果
OK 这就是我们的结论
我们ctrl + s 保存
回到我们的终端窗口
进入刚才的目录
这个目录刚才是什么呢
就是Add目录 对吧 cd Add目录
一列出来 你看到cpp
OK 我们g++ main.cpp
编译 编译出来以后
我们运行 它就问你a是几啊
我们给个1
b是几 2
然后1 + 2 = 3
它就把结果给你显示出来了
这就是很典型的一个C++的程序
在Linux下面涉及到
编辑 编译 链接然后测试
一连串的动作
必须按照这样的流程
进行我们的C++程序的开发
-1.1 提纲
-1.2 程序设计的基本概念
-1.3 简单C/C++程序介绍
-1.4 程序设计的基本流程
-1.5 基本语法元素
-1.6 程序设计风格
-1.7 编程实践
-第一讲 C/C++基本语法元素--编程实践提交入口
-2.1 提纲
-2.2 结构化程序设计基础
-2.3 布尔数据
-2.4 分支结构
-2.5 break语句
-2.6 循环结构
-2.7 编程实践
-第二讲 程序控制结构--编程实践提交入口
-3.1 提纲
-3.2 函数声明、调用与定义
-3.3 函数调用栈框架
-3.4 编程实践
-第三讲 函数--编程实践提交入口
-4.1 提纲
-4.2 算法概念与特征
-4.3 算法描述
-4.4 算法设计与实现
-4.5 递归算法(一)
-4.6 递归算法(二)
-4.7 容错与计算复杂度
-4.8 编程实践
-第四讲 算法--编程实践提交入口
-5.1 提纲
-5.2 库与接口
-5.3 随机数库(一)
-5.4 随机数库(二)
-5.5 作用域与生存期
-5.6 典型软件开发流程(一)
-5.7 典型软件开发流程(二)
-5.8 编程实践
-第五讲 程序组织与开发方法--编程实践提交入口
-6.1 提纲
-6.2 字符
-6.3 数组(一)
-6.4 数组(二)
-6.5 结构体
-6.6 编程实践
-第六讲 复合数据类型--编程实践提交入口
-7.1 提纲
-7.2 指针基本概念
-7.3 指针与函数
-7.4 指针与复合数据类型(一)
-7.5 指针与复合数据类型(二)
-7.6 字符串
-7.7 动态存储管理(一)
-7.8 动态存储管理(二)
-7.9 引用
-7.10 编程实践
-第七讲 指针与引用--编程实践提交入口
-8.1 提纲
-8.2 数据抽象(一)
-8.3 数据抽象(二)
-8.4 链表(一)
-8.5 链表(二)
-8.6 链表(三)
-8.7 链表(四)
-8.8 函数指针(一)
-8.9 函数指针(二)
-8.10 抽象链表(一)
-8.11 抽象链表(二)
-8.12 编程实践
-第八讲 链表与程序抽象--编程实践提交入口
-9.1 提纲
-9.2 程序抽象与面向对象
-9.3 类类型
-9.4 对象(一)
-9.5 对象(二)
-9.6 类与对象的成员(一)
-9.7 类与对象的成员(二)
-9.8 类与对象的成员(三)
-9.9 继承(一)
-9.10 继承(二)
-9.11 继承(三)
-9.12 多态(一)
-9.13 多态(二)
-9.14 编程实践
-第九讲 类与对象--编程实践提交入口
-10.1 提纲
-10.2 四则运算符重载(一)
-10.3 四则运算符重载(二)
-10.4 关系与下标操作符重载
-10.5 赋值操作符重载(一)
-10.6 赋值操作符重载(二)
-10.7 赋值操作符重载(三)
-10.8 赋值操作符重载(四)
-10.9 赋值操作符重载(五)
-10.10 流操作符重载(一)
-10.11 流操作符重载(二)
-10.12 流操作符重载(三)
-10.13 操作符重载总结
-10.14 编程实践
-第十讲 操作符重载--编程实践提交入口
-11.1 提纲
-11.2 泛型编程概览
-11.3 异常处理机制(一)
-11.4 异常处理机制(二)
-11.5 运行期型式信息(一)
-11.6 运行期型式信息(二)
-11.7 模板与型式参数化
-11.8 题外话:术语翻译
-11.9 泛型编程实践(一)
-11.10 泛型编程实践(二)
-11.11 泛型编程实践(三)
-11.12 泛型编程实践(四)
-11.13 泛型编程实践(五)
-11.14 泛型编程实践(六)
-11.15 泛型编程实践(七)
-11.16 泛型编程实践(八)
-11.17 泛型编程实践(九)
-11.18 泛型编程实践(十)
-11.19 编程实践
-第十一讲 泛型编程--编程实践提交入口
-12.1 提纲
-12.2 程序执行环境(一)
-12.3 程序执行环境(二)
-12.4 程序执行环境(三)
-12.5 程序执行环境(四)
-12.6 输入输出(一)
-12.7 输入输出(二)
-12.8 文件系统
-12.9 设备
-12.10 库(一)
-12.11 库(二)
-12.12 makefile文件(一)
-12.13 makefile文件(二)
-12.14 makefile文件(三)
-12.15 编程实践
-第十二讲 Linux系统编程基础--编程实践提交入口
-13.01 提纲
-13.02 进程基本概念
-13.03 信号
-13.04 进程管理(一)
-13.05 进程管理(二)
-13.06 进程管理(三)
-13.07 进程间通信(一)
-13.08 进程间通信(二)
-13.09 进程间通信(三)
-13.10 进程间通信(四)
-13.11 进程池
-13.12 编程实践
-第十三讲 进程编程--编程实践提交入口
-14.1 提纲
-14.2 线程基本概念
-14.3 线程管理(一)
-14.4 线程管理(二)
-14.5 线程管理(三)
-14.6 线程管理(四)
-14.7 线程同步机制(一)
-14.8 线程同步机制(二)
-14.9 C++11线程库(一)
-14.10 C++11线程库(二)
-14.11 C++11线程库(三)
-14.12 C++11线程库(四)
-14.13 C++11线程库(五)
-14.14 编程实践
-第十四讲 线程编程--编程实践提交入口
-15.1 提纲
-15.2 Internet网络协议
-15.3 套接字(一)
-15.4 套接字(二)
-15.5 编程实践
-第十五讲 网络编程--编程实践提交入口