充分利用C语言中的ADT和黑盒作用
在C与指针的某一章节中讲到了ADT和黑盒作用,读后感觉很好奇,于是乎自己写了几个程序测试了一下,最后发现结果并不是想书上所说的那样。最后发现是因为我的操作是错误的。
几个文件如下:
test.h
int
get_max();
int
get_age();
test.c
#include "test.h"
#include
//#include
static int age=12;
static int num1=0;
static int num2=1;
static int num3=2;
static int
getage(){
return age;
}
int get_age(){
return getage();
}
int get_max(){
// return max(num1,max(num2,num3));
return 9;
}
main.c
//#include "test.h"
#include
#include "test.h"
int main(){
int age=get_age();
printf("The age is:%d\n",age);
//age=getage();
//printf("The age is:%d\n",age);
return 0;
}
要使上面的黑盒效应发挥出威力,那么我们应该分别对上面的两个源文件进行编译链接(不包括头文件)
一、如果使用gcc -g main.c那么会发生这样的错误:
/tmp/ccm6WuFq.o: In function `main':
main.c:(.text+0xa): undefined reference to `get_age'
collect2: ld 返回 1
二、那么正确的方式是什么呢?可以有两种方式:
1)gcc -c test.c -o test.o ; gcc -c main.c -o main.o
然后gcc test.o main.o -o test
./test
2)第二种方法将编译链接方法一起执行
gcc test.c main.c -o test
./test
凡事都要知其然,更要知其所以然。那么这是为什么呢?从这里充分说明你对C语言是多么的不熟悉。
在test.h头文件中定义了几个函数的原型,这几个原型可以作为其他文件调用这些函数的接口,也就是说,当main.c文件想调用这几个方法时,只需要将这个文件include进来就可一了。但是这几个函数的定义实在test.c文件中,因此。在编译中要将其和main.c文件混合在一起进行编译链接。但是这时main文件只是看到了接口中定义的文件而对于test.c文件中的static函数getage()却不知道,从而起到保护的作用。
阅读(2830) | 评论(0) | 转发(0) |