gpt4 book ai didi

链接静态库时,typedef 结构会导致名称冲突吗?

转载 作者:太空宇宙 更新时间:2023-11-04 08:45:26 27 4
gpt4 key购买 nike

当我创建静态库时,typedef 结构会导致名称冲突吗?

鉴于下面的示例头文件,我了解到 myFun() 将是一个外部符号,并且可能与任何其他具有 myFun() 函数的库发生冲突。为避免这种情况,最好的办法是为 myFun() 指定一个更长更具体的名称。

// myFile.h

typedef struct
{
int myVar;
} myStruct;

void myFun(myStruct * input);

myStruct 是一个在与另一个库链接时可能导致命名冲突的外部符号吗?

为什么当我用 nm myLib.a 查看 .a 静态库文件时它没有被列出?

最佳答案

不,名称只能通过链接在库(或源文件)外部可见,而在 C 中,类型没有链接。 C11 §6.2.2/2:

In the set of translation units and libraries that constitutes an entire program, each declaration of a particular identifier with external linkage denotes the same object or function.

不同翻译单元中的两个 struct 定义(通常来自包含一个公共(public) header )必须匹配到一定程度的相似性才能相互兼容,但概念上每个翻译单元都有自己的一组不同的数据类型。

在 C++ 中,理论上您会担心,因为类类型和与类类型一起声明的 typedef 名称确实具有链接。但是,实际上链接器看不到它们。

所以,真的没有什么可担心的。

关于链接静态库时,typedef 结构会导致名称冲突吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21843524/

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