最近写vector和map相关的程序时,经常遇到编译无错误但是有警告的情况。警告中总是含有一个数字 warning 4786。
原因:
不是STL的问题也不是coder的问题,而是VC的一个bug。
VC认为,C/C++中的标示符应该小于256字节。如果大于等于这个长度,那么vc就会认为长度太长了,该给出警告了。
但是实际上,STL中很容易出现大于256字节的标识符,这并不是错误。
解决:
办法有很多,我试出来OK的是这个:
把下面这段话加入头文件中(比如我加的是StdAfx.h这个头文件)
#ifdef WIN32
#pragma warning (disable: 4514 4786)
#endif
另外,上面的命令还可以扩展:
once:只显示一次(警告/错误等)消息
default:重置编译器的警告行为到默认状态
1,2,3,4:四个警告级别
disable:禁止指定的警告信息
error:将指定的警告信息作为错误报告
比如
#pragma warning(disable:4786)// 不显示4507和34号警告信息
#pragma warning(once:4786)// 4385号警告信息仅报告一次
#pragma warning(error:4786)// 把164号警告信息作为一个错误。
本文介绍了解决Visual C++编译器中STL使用导致的4786号警告的方法。此警告源于VC对标识符长度的限制,默认情况下超过256字节即触发警告。文中提供了一种简单的解决方案,通过预编译指令来禁用这些警告。
7205

被折叠的 条评论
为什么被折叠?



