(一)直接使用gcc编译c程序
1、编写C程序
题目:请编写一个主程序文件 main1.c 和一个子程序文件 sub1.c, 要求:子程序sub1.c 包含一个算术运算函数 float x2x(int a,int b),此函数功能为对两个输入整型参数做某个运算,将结果做浮点数返回;主程序main1.c,定义并赋值两整型变量,然后调用函数 x2x,将x2x的返回结果printf出来。
过程如下:
在vmware虚拟机中,Ubuntu计算机Home界面中创建三个文档依次为:main1.c、sub1.c、sub1.h
代码如下:
(1)main1.c
#include"sub1.h"
int main()
{
int x=2,y=9; //定义x和y变量
printf("%.2f\n",x2x(x,y)); //输出处理后的值,精确到两位小数,x2x为头文件中计算b/a的函数
return 0;
}
(2)sub1.h(自定义头文件)
#ifndef __SUB1_H
#define __SUB1_H
#include<stdio.h>
float x2x(int a,int b); //计算b除以a的结果
#endif
(3)sub1.c
#include "sub1.h"
float x2x(int a,int b)//头文件中的x2x函数
{
float ans;
ans=(float)b/a;//结果为浮点型
return ans;
}
编辑好上述代码后保存即可。
2.gcc编译命令详解(以编译hello.c为例)
(1)gcc -E hello.c -o hello.i
编译阶段: 预处理 作用:编译器将源代码中包含头文件编译进来
(2)gcc -S hello.i -o hello.s
编译阶段:编译 作用:检查代码规范性并翻译成汇编语言
(3)gcc -c hello.s -o hello.o
编译阶段:汇编 作用:将.s文件转换为.o目标文件
(4)gcc hello.o -o hello
编译阶段:连接 作用:将目标文件转换为可执行文件
3.gcc直接编译
- 步骤一
- 命令:gcc -c sub1.c
- 作用:将sub1.c程序转换为目标文件sub1.o
- 步骤二
- 命令:gcc main1.c sub1.o -o main1
- 作用:编译main1.c文件为目标文件main1.o,然后链接sub1.o目标文件生成main1可执行 文件
- 步骤三
- 命令:./main1
- 执行./main1命令,即可执行编译生成的main1程序
具体命令过程如下:(ls指令:Linux下常用指令之一,命令显示当前目录的内容)
(二)与windows平台编程对比
1、 工具: Visual c++ 6.0编译器
2. 程序: 与上述Ubuntu上一致
3. 运行结果
4. 对比
在windows系统下,应用Visual C++ 6.0 编译以上程序发现,我们同时需要分别编写三个程序文件,但要想同时编译它们,就需要建立一个工程将它们放在一起,才能得到最终结果。
而在Ubuntu系统下,我们可以直接用gcc命令对这些程序文档进行相关操作,这对于程序的编译运行提供了很大的便利。
(三)使用Makefile编译c程序
1. Makefile文件编写规则
target:prerequisites
command # command以一个tab键开始
# target为一个目标文件,可以是Object File,也可以是执行文件。还可以是一个标签(Label)
# prerequisites是需要生成target所依赖的文件或是目标
# command也就是make需要执行的命令。(任意的Shell命令)
2. 编写Makefile文件并编译
(1)Makefile文件(建立方法同上):
main1:sub1.o main1.c
gcc main1.c sub1.o -o main1
sub1.o:sub1.c
gcc -c sub1.c -o sub1.o
clean:
rm *.o
(2)使用Makefile编译c程序
- 在源文件目录下执行命令
make
,即可编译得到可执行文件main1
具体如下:
- 删除编译产生的中间文件
在源文件目录下执行命令make clean
,即可删除编译过程中产生的*.o文件
(四)总结
通过此次在Ubuntu系统上编写C语言并运行的实验,我了解到了使用gcc命令直接编译和Makefile进行编译这两种生成可执行文件的方式;相比之前所学到的在windows系统下利用Visual C++ 6.0 编译软件运行程序,这种新的方法能更加便利地将多个程序文件同时编译运行,这大大提高了运行效率,也为我们的学习拓宽了道路。
PS:文章中如有不妥处,还请多多指正呀!!!!