C 语言:在 .c 文件中定义未在 .h 文件中声明的函数是否不好?

C language: is it bad to define functions in .c files which are not declared in .h files?

我在 .h 文件中声明了一个函数。

void func1();

在除了 func1 之外的 .c 文件中,我定义了 func2 并在 func1 的定义中使用它(func2 未在 .h 文件中声明)

void func2()
{
   do something;
}

void func1()
{
   func2();
   do something else;
}

为什么我这样做是因为我不想把func2 的声明放在.h 文件中(这个函数不会在模块外使用)。是的,我想在 C 中创建一种 "private" 函数。 我的问题是:这是一种不好的做法吗?有没有另一种方法可以在 C 的模块中创建 "private" 函数?

不,这还不错main()是一个很好的例子。

然而,如果该函数未在头文件中定义,则只能从 .c 文件本身正确调用它,因此应该声明 static

static void func2()
{
   do something;
}

使其静态化将使其对外部调用者不可用(因此,您不能将 main() 静态化)

为了监管这种模式,有一个 gcc 选项可以警告之前未原型化的非静态函数 -Wmissing-prototypes

这是一个被广泛使用的非常好的做法。这确实是用来创建一种"private"函数的。执行此操作时,您通常还将函数声明为静态的,例如:

static void func2()
{
   do something;
}

这样,该函数只能供此 c 文件中的代码使用。否则,如果您知道原型,您仍然可以在另一个文件中使用该函数。