欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

9.26 在Linux系统下编写C程序

程序员文章站 2022-07-14 12:34:18
...

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 输出结果

9.26 在Linux系统下编写C程序

​ 两种方式均能输出正确结果。

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编译

9.26 在Linux系统下编写C程序
​ 编译——组建——执行。在集成开发环境下处理简化了很多中间过程。

2.2.3 输出结果

9.26 在Linux系统下编写C程序
结果正确。

2.4 在以上实验的基础上,在ubuntu系统下用Makefile方式编写主程序。

​ 上述方式缺点十分明显。遇到文件量大、多文件不在同一目录下的情况几乎无法使用。这就要求我们使用Makefile方式处理。

test:*c
	gcc *.c -o test

​ 使用Makefile轻松编译全部的.c文件。

9.26 在Linux系统下编写C程序

​ 显然结果正确。

3.实验结论

​ 脱离IDE,在Linux环境下,需要兼顾底层细节。面对大型工程,应该使用Makefile方式编写程序,统一且高效,否则几乎无法应对大量的文件。

4.实验感悟

​ 之前曾经浅尝辄止地接触过Linux系统,现在要深入学习,感受到了些许的陌生和不适应。本实验使用到的gss指令和makefile指令很少,仅涉及建立文件、编译文件和基础的makefile语法。特别是makefile中的变量、通配符、函数等写法非常吸引我,所以进行了一些练习,在本次实验中不便展现,在接下来的学习中会尽快掌握。

相关标签: 实验作业 linux