测试
实验
vi
- 每个.c一个文件,每个.h一个文件,文件名中最好有自己的学号;
- 用Vi输入图中代码,并用gcc编译通过;
- 在Vi中使用K查找printf的帮助文档,提交vi编辑过程截图。
gcc
- 用gcc 进行预处理,编译,汇编,链接vi输入的代码;
- 生成的可执行文件中要有自己的学号;
- 提交预处理,编译,汇编,链接,运行过程截图。
gdb
- 用gcc -g编译vi输入的代码;
- 在main函数中设置一个行断点;
- 在main函数增加一个空循环,循环次数为自己学号后4位,设置一个约为学号一半的条件断点。
静态库
除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.a静态库?main.c如何使用mymath.a?
共享库
除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.so共享库?main.c如何使用mymath.so?
Makefile
写出编译上面vi编辑代码的makefile,编译出来的目标文件为testmymath, 只用显式规则就可以。
代码
head.h
#ifndef HEAD_H #define HEAD_H int add(int ,int); int sub(int ,int); int mul(int ,int); double div(int ,int); #endif
add.c
#include "head.h" int add(int a,int b){ return a+b; }
sub.c
#include "head.h" int sub(int a,int b){ return a-b; }
mul.c
#include "head.h" int mul(int a,int b){ return a*b; }
div.c
#include "head.h" double div(int a,int b){ return a/b; }
main.c
#include “head.h” int main(void){ int a,b; printf("enter two numbers:"); scanf("%d %d",&a,&b); printf("add:%d\n",add(a,b)); printf("sub:%d\n",sub(a,b)); printf("mul:%d\n",mul(a,b)); printf("div:%lf\n",div(a,b)); return 0; }
Makefile
testmymath:main.o add.o sub.o mul.o div.o gcc main.o add.o sub.o mul.o div.o -o testmymath main.o: main.c head.h gcc -c main.c -o main.o add.o: add.c head.h gcc -c add.c -o add.o sub.o: sub.c head.h gcc -c sub.c -o sub.o mul.o: mul.c head.h gcc -c mul.c -o mul.o div.o: div.c head.h gcc -c div.c -o div.o clean: rm -f *.o testmymath