静态函数在多文件中的用法

问题例子:
静态函数的定义与声明碰到一个很奇怪的问题,类似下面的代码,居然无法编译,test.h中包含一个static   void   test()的声明,test.c中有这个static   void   test()的实现,而后在main.c中调用。但是编译无法通过。 

下面两种方式可以编译可以通过: 
1、将test.c中static   void   test()的定义放到test.h中,这样可以编译通过 
2、去掉test.c和test.h中的static,让test()成为非静态函数,这样也可以通过 

但是我觉得无法理解的是,为什么下面这些代码就是编译不通过呢? 
另外,请兄弟们解惑:static   函数究竟有什么好处,与非static函数有何不同?? 

test.h 
------------------------------------------------ 
static   void   test(); 
------------------------------------------------ 

test.c 
------------------------------------------------ 
#include   "test.h " 
#include   <stdio.h> 
#include   <stdlib.h> 

static   void   test() 
{ 
        printf( "test....\n "); 
} 

------------------------------------------------ 

main.c 
------------------------------------------------- 
#include   <stdio.h> 
#include   <stdlib.h> 
#include   "test.h " 

int   main(int   argc,   char   *argv[]) 
{ 
        test();     
    system( "PAUSE ");
    return   0; 
} 

解释:
静态函数的声明不应该放在头文件里,应该放在静态函数所在的文件里。 

原因:以你的几个文件为例,把static   void   test();放在test.h里面,然后main.c使用这个头文件,由于在main.c文件里出现了static   void   test();这个声明,这迫使编译器在main.c文件里面寻找 
static   void   test()的函数体,结果当然找不到。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值