屏蔽掉warning 4786

最近写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号警告信息作为一个错误。 

你可能感兴趣的:(vector,扩展,编译器)