本篇段俩部分3.1 Linux下编写第一个 C C 程序,3.2gcc 编译器
我们在 Windows 下使用 C 语言开发的时候,一般都会有支持 Windows 的开发工具,比如我们学习 51 单片机或者 STM32,所使用的的 Keil 开发软件。此类开发工具一般都会集编辑、编译于一体,我们只需要编辑好代码,电机开发工具的编译按钮,就可以自动为我们编译出可执行的二进制文件了。Ubuntu 下的 C 语言开发与 Windows 下的 C 语言开发不一样的,并没有图形界面的开发工具,而且编辑和编译是分开的。我们需要使用文本编辑软件先编写代码,然后使用编译工具(GCC)来编译,最终生成可执行的二进制文件。如果我们的工程中有多个源文件,在编译的时候我们通常会通过 Makefile 文件来管理整个工程的源文件。本章我们来学习如何在 Ubuntu 下进行 C 语言成的编辑,GCC 编译,Makefile 文件的使用。通过本章学习我们可以掌握 Linux 下的 C 语言开发基本方法,为后面的学习做好准备。3.1 Linux 下编写第一个 C C 程序 程序本章节开始的部分我们介绍了 Ubuntu 下 C 程序开发分成两部分:编辑和编译。Ubuntu 下有很多种文本编辑的工具,如 vim、Gedit、Emacs,这里我们使用前面章节介绍的 vim 文本编辑工具来编辑 C 程序。相信大家在学习 C 语言的时候都是从“Hello World”这个程序开始的吧,下面我们通过这个程序,来学习下 Linux下 C 程序开发的流程。3.1.1 代码编写首先我们在用户根目录下建立文件夹“work”,用于保存所有 C 语言的程序,运行结果如下图所示:
然后进入创建的文件夹 work,为了方便管理,我们每个例程都创建单独的文件夹,首先我们创建文件夹“hello_world”来保存我们的第一个 C 程序,如下图所示:
然后进入上图中的 hello_world 文件夹,使用 vi 命令新建文件“main.c”,然后在里面输入下面的代码:#includeint mian(int argc, char *argv[]){printf("Hello World!\n");return 0;}编写完以后保存并退出 vim 编辑器,然后可以使用 cat 命令查看代码是否保存成功,如下图所示:
通过上图可以看到代码已经编辑完成了。3.1.2 代码编译Ubuntu 下使用 gcc 编译器来编译 C 程序,我们在安装 Ubuntu 系统的时候,gcc 编译器 morning 安装好了,我们可以在终端输入“gcc -v”来查看下 gcc 的版本,如下图所示:
通过上图可以看到 gcc 的版本信息,说明我们的 Ubuntu 上已经安装了 gcc 编译器了,下面我们来看看怎么通过 gcc 编译我们的第一个 C 程序,我们在终端输入“gcc main.c -o main”,然后回车,会生成 main 文件,如下图所示:
在上面的“gcc main.c -o main”这个命令里面“-o“用来指定编译生成的文件名字,我们指定的是 main,所以在图 3.1.2.2 中可以看到生成了文件“main”,如果我们想生成其它的文件名字,我们只需要修改“-o”后面的 main(修改成您希望生成的文件名字)。经过前面的步骤已经生成了可执行文件 main,现在我们演示下在终端如何运行一个可行性的程序,我们直接在终端当前目录下(可执行文件所在的目录下)输入“./main”,然后回车,就可以运行可执行文件 main 了,运行结果如下图所示:
在上图中运行的命令“./main”,其中的“./”代表当前目录下。我们可以看到在终端打印出了 HelloWorld!。至此,Linux 下的 C 语言编辑和编译的一整套流程我们就介绍完了。3.2 c gcc 编译器 编译器3.2.1 gcc 命令分析在 3.1 节我们已经使用 gcc 编译了 Linux 下的第一个 C 程序,gcc 命令的格式如下:gcc [参数] [文件名]主要参数说明如下:-c 编译、汇编到目标代码(.o),不链接成可执行文件-g 生成调试信息-o 编译完成后生成的文件名,如果不使用该选项,默认生成 a.out 文件-O 对程序进行优化编译,产生的可执行文件执行效率高-w 不生成任何警告-S 仅编译到汇编语言,不进行汇编和链接
3.2.2 编译警告错误处理我们是 Windows 下使用 Keil 或者其他开发工具,在编译的时候,如果程序有错误,开发工具会提示出具体的错误信息,可以很方便的定位到问题点,快速的修改出现的问题,gcc 同样也有类似的功能,下面我们来看下 gcc 的错误提示功能,首先我们在 work 目录下建立文件夹“test2”,然后使用 vim 在 test2 文件夹创建 main.c 文件夹,在 main.c 文件输入如下代码:#includeint main(int argc, char *argv[]){int a;a = 1printf("a=\n", a);return 0;}上面代码有两处错误:第 7 行 最后缺少“;”第 9 行 printf 语法不对,应该为:printf("a =%d\n", a);我们使用 gcc 编译 main.c,可以看到 gcc 会提示错误信息,如下图所示:
从上图中可以看到在 mian.c 文件的第 9 行 printf 前面缺少“;”我们在第 7 行“a = 1”后面加上“;”,然后继续编译,如下图所示:
从上图可以看出编译提示语法格式不对,我们把第 9 行修改成“printf("a=%d\n", a);”,然后在继续编译,如下图所示:
我们可以看到这次 gcc 编译通过,最终生成了文件 main。我们在终端执行 main,运行结果如下图所示:
从上图可以看到运行的结果和我们涉及到额结果一致,通过本例程可以看到 gcc 编译器不仅可以检测出
程序的错误,而且还会标记处错误在哪个文件的哪一行,很方便的帮助我们去修改问题。