gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 16:37:28 27 4
gpt4 key购买 nike

我有两个 C 文件。

文件1.c

int main()
{
func();
return 0;
}

文件2.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 函数有什么区别?

最佳答案

What is the difference between void and static void function in C?

真正的问题应该是 staticnon-static 函数有什么区别? (返回类型 void 无关紧要,它可以是 int 或其他任何类型)。

static 关键字有点被过度使用了。当它应用于函数时,意味着函数有internal linkage。 ,即它的范围限于translation unit内(仅作为源文件)。

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

在您的情况下,错误会自行显现,因为 static func 不能在其他源文件中使用。


什么时候应该使用static函数?

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

关于c - C中的void和static void函数有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41196027/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com