我有两个C文件。C中的void和static void函数有什么区别?
file1.c中
int main()
{
func();
return 0;
}
file2.c中
static void func(void)
{
puts("func called");
}
但是,如果我用命令cc file2.c file1.c
编译上面的代码中,我得到了下面,
undefined reference to `func'
collect2: error: ld returned 1 exit status
但是,如果我在file2.c中删除static
关键字并用命令cc file2.c file1.c
编译上面的代码,它成功运行。
所以,我有一个问题,在C中void和static void函数有什么区别?
静态函数不能从任何其他编译单元中调用。除去static关键字,并且该函数可以从任何编译单元调用,因此程序将链接。 – Peter
Peter的基本上是正确的,但是有一种高级场景,如果指向该函数的指针可用于其他文件中的代码,则静态函数可以由不同源文件中的代码调用。你可能不需要为此担心;你可能还需要了解有关函数的指针。严格的版本是“一个'static'函数不能通过其自己的翻译单元之外的代码调用_by name_”。 –
@Jonathan Leffler:哇。我会回答这样的彼得,但是,你是对的。哦,我知道如何使用一个指针来运作,但是,我们并没有记住所有特定场景的黑客。另外,因为如果一个函数必须在外面调用,还有一个指针,我不会声明它是静态的。确定黑客,但请记住它是一个黑客,而不是“你必须学习如何使用指针来运行” – jurhas