第二周 测试

测试

实验

vi

  1. 每个.c一个文件,每个.h一个文件,文件名中最好有自己的学号;
  2. 用Vi输入图中代码,并用gcc编译通过;
  3. 在Vi中使用K查找printf的帮助文档,提交vi编辑过程截图。









gcc

  1. 用gcc 进行预处理,编译,汇编,链接vi输入的代码;
  2. 生成的可执行文件中要有自己的学号;
  3. 提交预处理,编译,汇编,链接,运行过程截图。

gdb

  1. 用gcc -g编译vi输入的代码;
  2. 在main函数中设置一个行断点;
  3. 在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

main.c

#include<stdio.h>
#include<stdlib.h>
int sum(int N,int arr []);
int main (int argc ,char *argv[])
{
int result;
int ch[argc];
printf("%d\n",argc - 1);
for (int i = 0; i<argc; i++)
{
ch[i]=atoi(argv[i]);
result = sum (argc,ch);
}
printf ("the result is %d\n",result);
return;

}

sum.c

int sum(int N, int arr[])
{
int s = 0;
for (int i = 0; i<N;i++)
s +=arr[i];
return s;

}
posted @ 2019-11-26 17:14  肖子玉20199327  阅读(97)  评论(0编辑  收藏  举报