9.26 在Linux系统下编写C程序
9.26 在Linux系统下编写C程序
1.实验要求
请编写一个主程序文件 main1.c 和一个子程序文件 sub1.c, 要求:子程序sub1.c 包含一个算术运算函数 float x2x(int a,int b),此函数功能为对两个输入整型参数做某个运算,将结果做浮点数返回;主程序main1.c,定义并赋值两整型变量,然后调用函数 x2x,将x2x的返回结果printf出来。
1) 请在ubuntu系统用gcc 命令行方式编译主程序main1.c 并运行;
2) 请在windows系统下用你熟悉的编译工具编译主程序main1.c 并运行。
3) 在此基础上,在ubuntu系统下用Makefile方式编程主程序。
2.实验过程
2.1 在Linux系统下使用gcc命令方式编译
2.1.1 使用终端编写main1.c与sub1.c
#include<stdio.h>
int main()
{
float x2x(int a,int b);
int x,y;
float z;
printf("enter x and y:\n");
scanf("%d %d",&x,&y);
z=x2x(x,y);
printf("x+y=%f\n",z);
return 0;
}
main1.c 定义并输入两整数,调用函数x2x,打印结果。
float x2x(int a,int b)
{
return (a+b);
}
sub1.c 实现两个整数的加法并返回浮点数。
2.1.2 gcc编译
脱离IDE,要注意.c文件到.exe文件的中间过程。
-E 预处理:将.c .h文件展开,替换宏定义、头文件、库文件,成为.i文件 | gcc -E main1.c -o main1.i |
---|---|
-S 编译:检查语法,将.i文件编译为.S汇编文件 | gcc -S main1.i -o main1.S |
-c 汇编:转为机器码,将.S文件汇编为.o、.obj文件 | gcc -c main1.S -o main1.o |
-o 链接:将.o文件链接为.exe文件 | gcc main1.o -o main1 |
亦可以直接使用代码gcc main1.c -o main1直接生成可执行文件。
本次实验使用两种不同的方式处理。
2.1.2.1 将文件main1.c和sub1.c同时编译
gcc main1.c sub1.c -o tets1
这种方法在需要修改时要对所有文件重新编译。
2.1.2.2 将文件main1.c和sub1.c分步编译,之后链接编译后的目标文件
gcc -E main1.c -o main1.i
gcc -S main1.i -o main1.S
gcc -c main1.S -o main1.o
gcc -E sub1.c -o sub1.i
gcc -S sub1.i -o sub1.S
gcc -c sub1.S -o sub1.o
gcc main1.o sub1.o -o test
这种方法只需重新编译修改后的文件,保留未修改的文件。
2.1.3 输出结果
两种方式均能输出正确结果。
2.2 在windows系统下使用vc6编译
2.2.1 使用vc6编写main1.c与sub1.c
#include<stdio.h>
int main()
{
float x2x(int a,int b);
int x,y;
printf("enter x and y:\n");
scanf("%d %d",&x,&y);
printf("x+y=%f",x2x(x,y));
return 0;
}
main1.c定义并输入两整数,调用函数x2x,打印结果。
float x2x(int a,int b)
{
return(a+b);
}
sub1.c实现两个整数的加法并返回浮点数。
2.2.2 vc6编译
编译——组建——执行。在集成开发环境下处理简化了很多中间过程。
2.2.3 输出结果
结果正确。
2.4 在以上实验的基础上,在ubuntu系统下用Makefile方式编写主程序。
上述方式缺点十分明显。遇到文件量大、多文件不在同一目录下的情况几乎无法使用。这就要求我们使用Makefile方式处理。
test:*c
gcc *.c -o test
使用Makefile轻松编译全部的.c文件。
显然结果正确。
3.实验结论
脱离IDE,在Linux环境下,需要兼顾底层细节。面对大型工程,应该使用Makefile方式编写程序,统一且高效,否则几乎无法应对大量的文件。
4.实验感悟
之前曾经浅尝辄止地接触过Linux系统,现在要深入学习,感受到了些许的陌生和不适应。本实验使用到的gss指令和makefile指令很少,仅涉及建立文件、编译文件和基础的makefile语法。特别是makefile中的变量、通配符、函数等写法非常吸引我,所以进行了一些练习,在本次实验中不便展现,在接下来的学习中会尽快掌握。
推荐阅读
-
Linux系统下利用C程序输出某进程的内存占用信息
-
9.26 在Linux系统下编写C程序
-
linux学习笔记——在ubuntu系统下编译运行c程序并使用makefile管理项目
-
利用Qt/C++在腾讯云/阿里云服务器搭建TCP/IP协议实现网络通信以及Qt在linux下的安装和程序打包踩坑(详解)
-
在Linux系统中使用GDB来调试C/C++程序的方法
-
mysql5.7在centos下编写c语言程序操作数据库时,头文件#include
报错 -
Linux系统下利用C程序输出某进程的内存占用信息
-
linux下C程序从编写到执行完整过程
-
linux系统下通过GCC编译C/C++程序
-
Postgresql在Linux下的安装配置与C程序应用