gpt4 book ai didi

c++ - 可见性属性应该在声明中还是在定义中指定?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:47:58 33 4
gpt4 key购买 nike

his paper about shared libraries , Ulrich Drepper 建议在构建库时将符号可见性全局设置为隐藏,然后在源代码中为每个本应隐藏的符号设置为默认 public 导出它。但是,经过搜索,我仍然不明白应该在哪里指定visibility 属性:在declarations 中,还是在definitions 中?由于任何不属于接口(interface)一部分的符号都不会在公共(public) header 中声明,我认为后面的选项更好,但是 this page from Microsoft让我怀疑:那里,相应的属性似乎设置在 header 中。

例如,在Wayland协议(protocol)的开源实现libwayland中,它是这样完成的:

wayland-client.h :

void wl_event_queue_destroy(struct wl_event_queue *);

wayland-client.c :

WL_EXPORT void
wl_event_queue_destroy(struct wl_event_queue *)
{
/* ... */
}

我担心与其他编译器和平台的兼容性:GCC、Clang、MSVC 等。另请注意,这个问题也适用于 C++。

最佳答案

这对 GNU 来说并不重要,但在 Windows 上, header 声明无论如何都需要使用 dllimport 进行注释,因此通常也将可见性注释放在那里。

请注意,仅在编译库本身时才需要启用可见性注释,而不是在编译仅调用库函数的代码时才需要启用,因此大多数项目都会做类似的事情

#ifndef WL_EXPORT
# define WL_EXPORT
#endif

在标题中。

关于c++ - 可见性属性应该在声明中还是在定义中指定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26300967/

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