gpt4 book ai didi

c - 静态函数和具有 "hidden"可见性属性的函数之间的实际区别是什么?

转载 作者:太空狗 更新时间:2023-10-29 16:35:40 34 4
gpt4 key购买 nike

我知道在函数上使用 C 中的 static 关键字会将函数限制在定义它的编译单元中。我现在正在研究符号可见性,我对 static 函数和标有 __attribute__((visibility("hidden"))) 的函数之间的区别感到有点困惑,或使用 -fvisibility=hidden 命令行选项。

我有一种感觉,这些在幕后改变事物的方式完全不同,但我不知道有什么区别,也不知道在实际代码中使用它们时它意味着什么。两者之间有什么变化,您什么时候想使用其中一个?

最佳答案

具有 __attribute__((visibility("hidden"))) 的函数在包含它的共享库之外不可见,但如果该库是通过链接 foo.pic.o 创建的bar.pic.o 这样的函数fhid 可以在foo.c 中定义并从bar 中调用。 C。当然外部代码(例如来自主程序或其他一些共享库)不能调用那个 fhid

因此隐藏的可见性适用于整个共享库,而不适用于组成它的各个编译单元。

相比之下,foo.c 可以定义一个static void fsta(void) 函数,bar.c 来定义一个不同的 static void fsta(void) 函数(即使这很糟糕并且出于可读性原因应该避免)。

此外,原则上,static 函数可以更容易地内联,或者编译器可以(有时)为它使用不同的调用约定。

关于c - 静态函数和具有 "hidden"可见性属性的函数之间的实际区别是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14919528/

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