C++ typedef是否在最终二进制文件中公开?它们是否在符号文件和RTTI中可用?

C++ typedef是否在最终二进制文件中公开?它们是否在符号文件和RTTI中可用?,c++,c++11,typedef,symbols,C++,C++11,Typedef,Symbols,目前,我正在为函数指针在函数内部创建作用域TypeDef,这是执行到最终二进制还是类似于预处理器宏?(查找和替换)不,它们不携带。它们的行为根本不像预处理器 至少不使用MSVC编译器(假设导出函数)。我也不相信其他人 typedef本质上是一种别名机制 给定一定程度的优化和符号剥离,很少有符号会使它成为最终版本的二进制文件

目前,我正在为函数指针在函数内部创建作用域TypeDef,这是执行到最终二进制还是类似于预处理器宏?(查找和替换)

不,它们不携带。它们的行为根本不像预处理器

至少不使用MSVC编译器(假设导出函数)。我也不相信其他人

typedef本质上是一种别名机制


给定一定程度的优化和符号剥离,很少有符号会使它成为最终版本的二进制文件 一个类型有一个“用于链接目的的名称”,即编译器和链接器用来确定两个类型是否相同的“真实名称”。当您使用typedef时,编译器将把它转换回它引用的实际类型。有些情况下,typedef名称用于链接目的,例如当类型没有实名时,例如匿名结构或匿名枚举类型,例如

typedef struct { } anon_struct;

typedef enum { E=1 } anon_enum;

void f(anon_struct*, anon_enum);
函数
f
需要在其已损坏的名称中使用其参数类型的名称,但由于类型没有名称,因此将使用typedef名称,而这些typedef名称可能会显示在二进制文件中


typedefs在二进制中表达的另一种方式是调试符号,它是二进制中包含的附加可选数据,在运行时不会执行或使用,只有调试器和类似工具才会执行或使用。

@hvd我没有这么说。但现在将删除该评论。