题目:请编写一个主程序文件 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; }
编辑好上述代码后保存即可。
(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
编译阶段:连接 作用:将目标文件转换为可执行文件
具体命令过程如下:(ls指令:Linux下常用指令之一,命令显示当前目录的内容)
1、 工具: Visual c++ 6.0编译器
2. 程序: 与上述Ubuntu上一致
3. 运行结果
4. 对比
在windows系统下,应用Visual C++ 6.0 编译以上程序发现,我们同时需要分别编写三个程序文件,但要想同时编译它们,就需要建立一个工程将它们放在一起,才能得到最终结果。
而在Ubuntu系统下,我们可以直接用gcc命令对这些程序文档进行相关操作,这对于程序的编译运行提供了很大的便利。
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:文章中如有不妥处,还请多多指正呀!!!!