我有可以运行的代码,但是我认为我做的方法不正确。我有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);
和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’
答案 0 :(得分:8)
我只将void init(int param);
原型放在init.h
中。在init.c中设置所有CFG函数static
。
您仍然需要CFG函数的原型(除非您将init()
移到末尾),但是您可以在init.c
中声明它们。或者,您可以将它们放在一个单独的init_impl.h
文件中,该模块的用户无法使用#include
。