gpt4 book ai didi

c - 在 header 中定义一个符号,其重复实例将被链接器合并

转载 作者:太空宇宙 更新时间:2023-11-04 02:31:59 47 4
gpt4 key购买 nike

在 C 中有什么方法可以定义一个符号,这样所有相同的定义 都将被链接器合并?这在链接器级别似乎是可能的,因为例如,C++ 支持模板函数和模板静态变量,它们正是这样做的1

具体来说,假设我想在头文件 int_array.h 中定义一个像这样的 int array[]:

int array[42] = {};

当许多单独的编译单元都包含int_array.h时,它们对应的.o文件显然会包含array的定义和空间- 但是当它们链接在一起时,我希望只有一个 array 符号存在并且每个人都指向它。

答案不一定是标准 C(事实上,链接器并没有真正明确地由标准解决)——但它应该普遍适用于现代编译器。


1 这是一个 C 问题,而不是 C++ 问题,但事实证明,每个现代工具链都对两者使用相同的链接器。

最佳答案

只需将它们声明为弱:

__attribute__((weak)) int array[42] = {};

有关更多信息,请参见例如here .

关于c - 在 header 中定义一个符号,其重复实例将被链接器合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42035203/

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