C中的void和static void函数有什么区别?

msc*_*msc 13 c static

我有两个C文件.

在file1.c

int main()
{
  func(); 
  return 0;  
}
Run Code Online (Sandbox Code Playgroud)

file2.c中

static void func(void)
{
  puts("func called");
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我用命令编译上面的代码cc file2.c file1.c,我得到了以下内容,

undefined reference to `func'
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

但是,如果我删除file2.c中的static关键字并使用命令编译上面的代码,它就会成功运行.cc file2.c file1.c

所以,我有一个问题,C中的void和static void函数什么区别?

art*_*rtm 29

C中的void和static void函数有什么区别?

真正的问题应该是staticnon-static功能之间的区别是什么?(返回类型void无关紧要,可以是int或其他任何东西).

static关键字有点过度使用.当它适用于函数时,意味着该函数具有内部链接,即其范围仅限于翻译单元(简称为源文件).

默认情况下,函数是非静态的,并具有外部链接.该函数可以由不同的源文件使用.

在您的情况下,错误会自行显示,因为static func无法在其他源文件中使用.


什么时候应该使用static功能?

static函数通常用于避免较大项目中的名称冲突.如果您检查Linux内核源代码,drivers/net那么您将看到许多static void函数.驱动程序由不同的供应商开发,static功能的使用确保他们可以按照自己的方式命名功能,而不必担心与其他非相关驱动程序开发人员的名称冲突.