【问题标题】:How can I work around Visual C++ 2005's "decorated name length exceeded, name was truncated" warning?如何解决 Visual C++ 2005 的“超出装饰名称长度,名称被截断”警告?
【发布时间】:2011-07-29 23:33:31
【问题描述】:

例如,假设我有一段代码看起来像这样:

mutable std::vector<std::vector<std::vector<std::vector<
std::vector<MyNamespace::MyType> > > > > myFreakingLongVectorThing;

我收到如下警告:

C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\xstring(1665) : warning   
    C4503: 'std::vector<_Ty>::operator []' : decorated name length exceeded, name was truncated
    with
    [
      _Ty=std::vector<std::vector<std::vector<std::vector<std::vector<MyNamespace::MyType>>>>>
    ]

有没有什么办法可以重写那个该死的长向量来避免收到警告?我仍然希望数据结构相同,但没有收到警告。我不想禁用警告。可能吗?

注意:这是 Visual Studio 2005

....如果你真的很好奇我为什么要使用如此可怕的数据结构,那是由自动生成的代码引起的。

【问题讨论】:

  • FWIW,Microsoft 增加了 VC++ 2008 中修饰名称的最大长度,主要是因为 Boost 库作者抱怨这个确切的问题。您有机会加入现代世界并使用不到 7 年的编译器吗? ;-]
  • 这根本不是 Visual Studio 的错,而是 VC++ 的错。我已经相应地修改了标题和标签。
  • I still want the data structure to be the same, but not get that warning. I don't want to disable the warning. Possible?
  • ildjarn:我们正在努力加入现代编译器的现实世界!那么在 Visual Studio 2008 上可以吗?
  • 我添加了visualstudio.uservoice.com/forums/121579-visual-studio-2015/…,因为这在 VS2015 中仍然是一个问题

标签: c++ visual-c++ visual-studio-2005 warnings name-decoration


【解决方案1】:

如果您不想看到警告,则必须禁用它或使用更新的编译器。

警告是关于类型名称的调试信息限制为 255 个字符。只要这 255 个字符对于两种不同的类型相同,就可以了。如果它们是相同的,你无论如何也做不了太多!

在你可以升级编译器之前把它关掉!

【讨论】:

  • 我在 VS 2010 中遇到了这个问题。:(
  • 仍然是 VS2013 Nov CTP 的问题 :-(
  • 他们将其增加到 4096,但它仍然会导致元编程出现问题,您可以从类型列表构建类型列表。他们应该简单地使用可变长度的字符串,他们为什么要使用这些限制?有一个规则,它被称为“零,一,无限”。他们不尊重它。
  • 信不信由你,但即使是来自 VS2015 的警告也将我带到了这里:
  • VS2017 中的相同问题 :(
【解决方案2】:

这与我在使用 STL 映射做任何事情时在 Visual C++ 6 中遇到的错误并没有什么不同。您只需要咬紧牙关,告诉编译器对该警告闭嘴。它对类型名称的长度有一个基本的内部限制。事实上,这是一个非常无用的警告,只是抱怨编译器/调试器的内部名称限制。

#pragma warning(disable : 4503)

如果您正在考虑移植到另一个编译器,只需将其包装在 Visaul C++ 的 #ifdef 中:

#ifdef MSVC
  #pragma warning(disable : 4503)
#endif

【讨论】:

猜你喜欢
  • 2012-10-29
  • 2012-02-28
  • 2016-10-24
  • 1970-01-01
  • 2017-11-28
  • 1970-01-01
  • 2012-11-08
  • 1970-01-01
相关资源
最近更新 更多