C++ RTTI 的编译选项

Visual C++ 5.0 好像是用 /GR选项,但是在Visual Studio 2005版下编译,侯捷的RTTI.CPP就会产生一堆下面错误的讯息:

RTTI.CPP
C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE\xlocale(326) : warning C4530: 已使用 C++ 例外处理常式,但没有启用回溯语意 (Unwind Semantics)。请指定 /EHsc
C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE\xlocale(341) : warning C4530: 已使用 C++ 例外处理常式,但没有启用回溯语意 (Unwind Semantics)。请指定 /EHsc
C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE\xlocale(358) : warning C4530: 已使用 C++ 例外处理常式,但没有启用回溯语意 (Unwind Semantics)。请指定 /EHsc
C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE\istream(1075) : warning C4530: 已使用 C++ 例外处理常式,但没有启用回溯语意 (Unwind Semantics)。请指定 /EHsc
C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE\ostream(520) : warning C4530: 已使用 C++ 例外处理常式,但没有启用回溯语意 (Unwind Semantics)。请指定 /EHsc
        C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE\ostream(512) : 编译类别 样板 成员函式 ‘std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::put(_Elem)’ 时
        with
        [
            _Elem=char,
            _Traits=std::char_traits<char>
        ]
        C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE\ostream(971) : 请参阅所要编译的类别 样板 具现化 ‘std::basic_ostream<_Elem,_Traits>’ 的参考
        with
        [
            _Elem=char,
            _Traits=std::char_traits<char>
        ]
C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE\ostream(520) : warning C4530: 已使用 C++ 例外处理常式,但没有启用回溯语意 (Unwind Semantics)。请指定 /EHsc
        C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE\ostream(512) : 编译类别 样板 成员函式 ‘std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::put(_Elem)’ 时
        with
        [
            _Elem=wchar_t,
            _Traits=std::char_traits<wchar_t>
        ]
        C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE\ostream(980) : 请参阅所要编译的类别 样板 具现化 ‘std::basic_ostream<_Elem,_Traits>’ 的参考
        with
        [
            _Elem=wchar_t,
            _Traits=std::char_traits<wchar_t>
        ]
C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE\istream(102) : warning C4530: 已使用 C++ 例外处理常式,但没有启用回溯语意 (Unwind Semantics)。请指定 /EHsc
        C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE\istream(92) : 编译类别 样板 成员函式 ‘bool std::basic_istream<_Elem,_Traits>::_Ipfx(bool)’ 时
        with
        [
            _Elem=char,
            _Traits=std::char_traits<char>
        ]
        C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE\istream(1065) : 请参阅所要编译的类别 样板 具现化 ‘std::basic_istream<_Elem,_Traits>’ 的参考
        with
        [
            _Elem=char,
            _Traits=std::char_traits<char>
        ]
C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE\istream(102) : warning C4530: 已使用 C++ 例外处理常式,但没有启用回溯语意 (Unwind Semantics)。请指定 /EHsc
        C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE\istream(92) : 编译类别 样板 成员函式 ‘bool std::basic_istream<_Elem,_Traits>::_Ipfx(bool)’ 时
        with
        [
            _Elem=wchar_t,
            _Traits=std::char_traits<wchar_t>
        ]
        C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE\istream(1100) : 请参阅所要编译的类别 样板 具现化 ‘std::basic_istream<_Elem,_Traits>’ 的参考
        with
        [
            _Elem=wchar_t,
            _Traits=std::char_traits<wchar_t>
        ]
C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE\ostream(144) : warning C4530: 已使用 C++ 例外处理常式,但没有启用回溯语意 (Unwind Semantics)。请指定 /EHsc
        C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE\ostream(143) : 编译类别 样板 成员函式 ‘void std::basic_ostream<_Elem,_Traits>::_Osfx(void)’ 时
        with
        [
            _Elem=char,
            _Traits=std::char_traits<char>
        ]
C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE\ostream(144) : warning C4530: 已使用 C++ 例外处理常式,但没有启用回溯语意 (Unwind Semantics)。请指定 /EHsc
        C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE\ostream(143) : 编译类别 样板 成员函式 ‘void std::basic_ostream<_Elem,_Traits>::_Osfx(void)’ 时
        with
        [
            _Elem=wchar_t,
            _Traits=std::char_traits<wchar_t>
        ]
C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE\xstring(2009) : warning C4530: 已使用 C++ 例外处理常式,但没有启用回溯语意 (Unwind Semantics)。请指定 /EHsc
        C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE\xstring(2000) : 编译类别 样板 成员函式 ‘void std::basic_string<_Elem,_Traits,_Ax>::_Copy(unsigned int,unsigned int)’ 时
        with
        [
            _Elem=char,
            _Traits=std::char_traits<char>,
            _Ax=std::allocator<char>
        ]
        C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE\stdexcept(48) : 请参阅所要编译的类别 样板 具现化 ‘std::basic_string<_Elem,_Traits,_Ax>’ 的参考
        with
        [
            _Elem=char,
            _Traits=std::char_traits<char>,
            _Ax=std::allocator<char>
        ]
C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE\ostream(757) : warning C4530: 已使用 C++ 例外处理常式,但没有启用回溯语意 (Unwind Semantics)。请指定 /EHsc
        RTTI.CPP(19) : 请参阅所要编译的函式 样板 具现化 ‘std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const char *)’ 的参考
        with
        [
            _Elem=char,
            _Traits=std::char_traits<char>
        ]
Microsoft (R) Incremental Linker Version 8.00.50727.762
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:RTTI.exe
RTTI.obj

很明显的它叫我们改用/EHsc选项。

但是如果你查Google时,你会发现/GX选项是跟/EHsc选项是一样的,但是我编译时会有这样的警告:
cl : 命令列 warning D9035 : 选项 ‘GX’ 已被取代,在未来的发行版本中将会移除
cl : 命令列 warning D9036 : 请用 ‘EHsc’ 代替 ‘GX’

表示/GX选项是Visual C++ 5.0以后,2005以前版本在使用的!