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

mul*_*iku 0 c function call

我有这个代码,它有效,但我不认为我正在以正确的方式做到这一点.我有3个文件main.c,init.c和init.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);
Run Code Online (Sandbox Code Playgroud)

并且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;
}
Run Code Online (Sandbox Code Playgroud)

从我的main.c文件中我称之为:

#include "init.h"

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

    init(0);

    //do stuff....
}
Run Code Online (Sandbox Code Playgroud)

基本上,我只调用一个函数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’

Fre*_*son 8

我只把void init(int param);原型放入init.h.static在init.c中创建所有CFG函数.

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