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

标签 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 是私有(private)的。所以我的问题是,执行此操作的正确方法是什么?

我最初的想法是让 CFG 函数静态并且不在 main.c 中执行#include "init.h"所以只有 init() 是外部的。这也有效,但编译器给了我警告 warning: implicit declaration of function ‘init’

最佳答案

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

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

关于c - 使用静态函数的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53010825/

相关文章:

ios - iPhone 通话记录和应用商店

为 Labview 创建 DLL

c - 单行打印中序树遍历的数据,以空格分隔,以换行符结尾

c - C 中的冒泡排序算法

javascript - 从 css 调用 <a> 标签到 javascript 函数

ios - gdb 调用 malloc 失败 (iOS)

c - 在 Matlab 中绘制具有表格的 2D 曲线

c - 在 MinGW/MSYS2 上编译 XZ Utils 时的未知类型

JavaScript 返回值第 2 部分

javascript - 使用JS函数代替重复代码