使用静态函数的正确方法是什么?

时间:2018-10-26 14:23:43

标签: c function call

我有可以运行的代码,但是我认为我做的方法不正确。我有3个文件,main.cinit.cinit.h

init.h文件如下所示(为简单起见,在此示例中,我省略了预处理程序指令):

void init(int param);

int firstCFG(int param);
int secondCFG(int param);
int thirdCFG(int param);
int fourthCFG(int param);
int fifthCFG(int param);

init.c文件如下:

#include "init.h"

void init(int param){
   int cfg1 = firstCFG(1);
   int cfg2 = secondCFG(2);
   int cfg3 = thirdCFG(3);
   int cfg4 = fourtCFG(4);
   int cfg5 = fifthCFG(5);
}

int firstCFG(int param){
   //do stuff
   return stuff;
}
int secondCFG(int param){
   //do stuff
   return stuff;
}
int thirdCFG(int param){
   //do stuff
   return stuff;
}
int fourthCFG(int param){
   //do stuff
   return stuff;
}
int fifthCFG(int param){
   //do stuff
   return stuff;
}

在我的main.c文件中,我这样称呼它:

#include "init.h"

int main(int argc, char** argv) {

    init(0);

    //do stuff....
}

因此,基本上,我只调用init.c-init();中的一个函数,而该文件中的其他函数是从该文件本身调用的。但是由于我在主文件中包括了init.h,所以我可以从main调用所有CFG函数,但我不希望这样做。我希望main.c文件只看到init()函数,而CFG函数对于init.c是私有的。所以我的问题是,什么是正确的方法?

我最初的工作是使CFG函数static不在#include "init.h"中执行main.c,因此只有init()是外部的。那也可行,但是编译器给我警告warning: implicit declaration of function ‘init’

1 个答案:

答案 0 :(得分:8)

我只将void init(int param);原型放在init.h中。在init.c中设置所有CFG函数static

您仍然需要CFG函数的原型(除非您将init()移到末尾),但是您可以在init.c中声明它们。或者,您可以将它们放在一个单独的init_impl.h文件中,该模块的用户无法使用#include