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 文件中的代码使用。否则,如果您知道原型,您仍然可以在另一个文件中使用该函数。
我在 .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 文件中的代码使用。否则,如果您知道原型,您仍然可以在另一个文件中使用该函数。