Microsoft 的 Visual C++ 编译器有一个特定的编译器警告C4503关于截断超过编译器限制(4096 个字符)的修饰名称。他们对警告声明的描述
但是,程序的正确性不受截断名称的影响。
这怎么可能?
在我的编译和链接心智模型中,编译器输出的修饰符号名称是唯一将实现它的对象和使用它的对象之间的特定函数关联起来的东西,允许两者在链接处连接时间。如果两个不同的函数具有足够长的标识符以被截断,并且截断后剩余的部分是相同的,那么链接器怎么可能使它们保持直线?
你的心智模型是正确的。如果发生冲突,您会收到链接错误。该警告的消息只是对编译器发出的一个非常常见的事件的简短描述 - 它不是对可能发生的所有可能后果的完整解释,您应该知道。
有关完整的解释(包括提及链接器和调试器的问题),请参阅MSDN 文章。