一个#define的理解

来源:百度知道 编辑:UC知道 时间:2024/06/08 22:29:42
#if defined(_MSC_VER) && _MSC_VER <1400
#pragma warning (disable:4786)
#endif

#include <iostream>
#include <string>
#include <map>
前面三行是什么意思啊...我看不懂...
他的结果是可以让很长的编译变的简单...又快

_MSC_VER 定义编译器的版本,VC++6.0就是1200
// VC 2005及其以上版本
#if defined(_MSC_VER) && _MSC_VER >= 1400

#pragma warning (disable:4786)
此warning产生的原因是因为标识符过长,超过了最大限定255个字。例如:
#define a_really_long_class_name a_really_really_really_really_really_really_really_ \
really_really_really_really_really_really_really_really_really_really_really_really_ \
really_really_really_really_really_really_really_really_really_really_really_really_really_really_really
class a_really_long_class_name
{
public:
a_really_long_class_name() {};
int m_data;
};
void main()
{
a_really_long_class_name test_obj;
test_obj.m_data = 12;
}
类名超过了255个字,使用时就会报4786的waring。在使用STL(C++标准模板库)的时候经常引发类似的错
误,尤其是vector,map这类模板类,模板中套模板,一不小心就超长了。例如:
template <class A1, class A2, class A3, class A4>
class VeryLongClassNameA{};
template <class B1, class B2, class B3>
class VeryLongClassNameB{};