使用静态函数的正确方法是什么?
What is the correct way to use static functions?
我有这段代码,它可以工作,但我认为我的做法不对。我有 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
并且不在 main.c
中执行 #include "init.h"
所以只有 init()
是外部的。这也有效,但编译器给了我警告 warning: implicit declaration of function ‘init’
我只 void init(int param);
原型放在 init.h
中。在init.c.
中制作所有CFG函数static
您仍然需要 CFG 函数的原型(除非您将 init()
移到最后),但您可以在 init.c
中声明它们。或者您可以将它们放在一个单独的 init_impl.h
文件中,该文件对 #include
.
模块的用户不可用
我有这段代码,它可以工作,但我认为我的做法不对。我有 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
并且不在 main.c
中执行 #include "init.h"
所以只有 init()
是外部的。这也有效,但编译器给了我警告 warning: implicit declaration of function ‘init’
我只 void init(int param);
原型放在 init.h
中。在init.c.
static
您仍然需要 CFG 函数的原型(除非您将 init()
移到最后),但您可以在 init.c
中声明它们。或者您可以将它们放在一个单独的 init_impl.h
文件中,该文件对 #include
.