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

时间:2014-02-18 03:01:33

标签: c typedef static-linking nm

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

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

// myFile.h

typedef struct
{
    int myVar;
} myStruct;

void myFun(myStruct * input);

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

当我查看带.a的{​​{1}}静态库文件时,为什么没有列出?

1 个答案:

答案 0 :(得分:2)

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

  

在构成整个程序的翻译单元和库的集合中,具有外部链接的特定标识符的每个声明表示相同的对象或功能。

不同翻译单元中的两个struct定义(通常来自包含公共标题)必须匹配一定程度的相似性才能实现彼此的兼容性,但从概念上讲,每个翻译单元都有自己独特的一组数据类型。

在C ++中,理论上您会引起关注,因为类类型和类类型声明的typedef名称确实存在联系。但是,实际上链接器不会看到它们。

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