是声明一个静态函数以使其成为私有函数还是只在 .c 文件中声明它并将其排除在 header 之外更好?

Is it better to declare a function static to make it private or declaring it only on the .c file and excluding it from the header?

我正在用 c 编写一个库,有些函数我希望可以从其他 c 文件调用,有些我想保密。

我知道可以通过声明 static 来隐藏库文件之外的函数,但同样可以通过只声明它的实现并将它从 header.

比较:

a.h

//static int private_routine();
int sample();


a.c

/*static*/ int private_routine(){

}
int sample(){
  private_routine();
}

哪种做法最好?

要将函数 "private" 或更好地保留在单个文件的范围内,您需要声明它们 static。否则你可以在其他文件中重新声明相同的函数并继续使用它。

例如:

#include "a.h" // without declaration of private_routine()

/*extern*/ int private_routine(); // by default every declaration behaves as with extern keyword, which means function is defined elsewhere

int main()
{
    private_routine(); // can use here
    return 0;
}

编辑:正如评论中指出的那样,在一个应用程序中不可能在不声明的情况下多次定义具有相同名称的函数 static。如果您定义给定函数名称 N 次,其中至少 N-1 次必须是 static.