zoukankan      html  css  js  c++  java
  • 静态函数在多文件中的用法

    问题例子:
    静态函数的定义与声明碰到一个很奇怪的问题,类似下面的代码,居然无法编译,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....
     "); 
    } 
    
    ------------------------------------------------ 
    
    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()的函数体,结果当然找不到。

  • 相关阅读:
    2021上半年下午第二题
    21年软件设计师上半年下午试题一
    软考下午第三题-用例图和类图
    类图
    用例图-包含、扩展、泛化
    软考下午题二------数据库设计
    软件设计师下午题-数据流图
    IP练习题
    2020软件工程作业02
    2020软件工程作业01
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13318226.html
Copyright © 2011-2022 走看看