如果编译器截断了符号的修饰名,它怎么可能被正确链接呢?



Microsoft的Visual c++编译器有一个特定的编译器警告,C4503,关于截断超过编译器限制(4096个字符)的修饰名称。它们对警告声明的描述

但是,程序的正确性不受截断名称的影响。

这怎么可能呢?

在我的编译和链接的心智模型中,编译器输出的修饰符号名称是唯一将实现它的对象和使用它的对象之间的特定函数关联起来的东西,允许两者在链接时连接起来。如果两个不同的函数有足够长的标识符可以被截断,并且截断后剩下的部分是相同的,那么链接器如何可能使它们保持直的?

你的思维模式是正确的。在冲突的情况下,你得到链接错误。该警告的消息只是编译器发出的一个非常常见的事件的简短描述-它不是所有可能发生的分支的完整解释,您应该知道。

完整的解释-包括链接器和调试器的问题-请参阅MSDN文章。

相关内容

最新更新