Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1981980
  • 博文数量: 424
  • 博客积分: 1291
  • 博客等级: 中尉
  • 技术积分: 2682
  • 用 户 组: 普通用户
  • 注册时间: 2012-08-13 01:34
个人简介

linux oracle 网络安全 编程

文章分类

全部博文(424)

文章存档

2016年(22)

2015年(53)

2014年(57)

2013年(242)

2012年(50)

分类: C/C++

2014-01-17 21:47:54

充分利用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) |
给主人留下些什么吧!~~