C++ RTTI 的編譯選項

Visual C++ 5.0 好像是用 /GR選項,但是在Visual Studio 2005版下編譯,侯捷的RTTI.CPP就會產生一堆下面錯誤的訊息:

RTTI.CPP
C:Program FilesMicrosoft Visual Studio 8VCINCLUDExlocale(326) : warning C4530: 已使用 C++ 例外處理常式,但沒有啟用回溯語意 (Unwind Semantics)。請指定 /EHsc
C:Program FilesMicrosoft Visual Studio 8VCINCLUDExlocale(341) : warning C4530: 已使用 C++ 例外處理常式,但沒有啟用回溯語意 (Unwind Semantics)。請指定 /EHsc
C:Program FilesMicrosoft Visual Studio 8VCINCLUDExlocale(358) : warning C4530: 已使用 C++ 例外處理常式,但沒有啟用回溯語意 (Unwind Semantics)。請指定 /EHsc
C:Program FilesMicrosoft Visual Studio 8VCINCLUDEistream(1075) : warning C4530: 已使用 C++ 例外處理常式,但沒有啟用回溯語意 (Unwind Semantics)。請指定 /EHsc
C:Program FilesMicrosoft Visual Studio 8VCINCLUDEostream(520) : warning C4530: 已使用 C++ 例外處理常式,但沒有啟用回溯語意 (Unwind Semantics)。請指定 /EHsc
        C:Program FilesMicrosoft Visual Studio 8VCINCLUDEostream(512) : 編譯類別 樣板 成員函式 ‘std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::put(_Elem)’ 時
        with
        [
            _Elem=char,
            _Traits=std::char_traits<char>
        ]
        C:Program FilesMicrosoft Visual Studio 8VCINCLUDEostream(971) : 請參閱所要編譯的類別 樣板 具現化 ‘std::basic_ostream<_Elem,_Traits>’ 的參考
        with
        [
            _Elem=char,
            _Traits=std::char_traits<char>
        ]
C:Program FilesMicrosoft Visual Studio 8VCINCLUDEostream(520) : warning C4530: 已使用 C++ 例外處理常式,但沒有啟用回溯語意 (Unwind Semantics)。請指定 /EHsc
        C:Program FilesMicrosoft Visual Studio 8VCINCLUDEostream(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 FilesMicrosoft Visual Studio 8VCINCLUDEostream(980) : 請參閱所要編譯的類別 樣板 具現化 ‘std::basic_ostream<_Elem,_Traits>’ 的參考
        with
        [
            _Elem=wchar_t,
            _Traits=std::char_traits<wchar_t>
        ]
C:Program FilesMicrosoft Visual Studio 8VCINCLUDEistream(102) : warning C4530: 已使用 C++ 例外處理常式,但沒有啟用回溯語意 (Unwind Semantics)。請指定 /EHsc
        C:Program FilesMicrosoft Visual Studio 8VCINCLUDEistream(92) : 編譯類別 樣板 成員函式 ‘bool std::basic_istream<_Elem,_Traits>::_Ipfx(bool)’ 時
        with
        [
            _Elem=char,
            _Traits=std::char_traits<char>
        ]
        C:Program FilesMicrosoft Visual Studio 8VCINCLUDEistream(1065) : 請參閱所要編譯的類別 樣板 具現化 ‘std::basic_istream<_Elem,_Traits>’ 的參考
        with
        [
            _Elem=char,
            _Traits=std::char_traits<char>
        ]
C:Program FilesMicrosoft Visual Studio 8VCINCLUDEistream(102) : warning C4530: 已使用 C++ 例外處理常式,但沒有啟用回溯語意 (Unwind Semantics)。請指定 /EHsc
        C:Program FilesMicrosoft Visual Studio 8VCINCLUDEistream(92) : 編譯類別 樣板 成員函式 ‘bool std::basic_istream<_Elem,_Traits>::_Ipfx(bool)’ 時
        with
        [
            _Elem=wchar_t,
            _Traits=std::char_traits<wchar_t>
        ]
        C:Program FilesMicrosoft Visual Studio 8VCINCLUDEistream(1100) : 請參閱所要編譯的類別 樣板 具現化 ‘std::basic_istream<_Elem,_Traits>’ 的參考
        with
        [
            _Elem=wchar_t,
            _Traits=std::char_traits<wchar_t>
        ]
C:Program FilesMicrosoft Visual Studio 8VCINCLUDEostream(144) : warning C4530: 已使用 C++ 例外處理常式,但沒有啟用回溯語意 (Unwind Semantics)。請指定 /EHsc
        C:Program FilesMicrosoft Visual Studio 8VCINCLUDEostream(143) : 編譯類別 樣板 成員函式 ‘void std::basic_ostream<_Elem,_Traits>::_Osfx(void)’ 時
        with
        [
            _Elem=char,
            _Traits=std::char_traits<char>
        ]
C:Program FilesMicrosoft Visual Studio 8VCINCLUDEostream(144) : warning C4530: 已使用 C++ 例外處理常式,但沒有啟用回溯語意 (Unwind Semantics)。請指定 /EHsc
        C:Program FilesMicrosoft Visual Studio 8VCINCLUDEostream(143) : 編譯類別 樣板 成員函式 ‘void std::basic_ostream<_Elem,_Traits>::_Osfx(void)’ 時
        with
        [
            _Elem=wchar_t,
            _Traits=std::char_traits<wchar_t>
        ]
C:Program FilesMicrosoft Visual Studio 8VCINCLUDExstring(2009) : warning C4530: 已使用 C++ 例外處理常式,但沒有啟用回溯語意 (Unwind Semantics)。請指定 /EHsc
        C:Program FilesMicrosoft Visual Studio 8VCINCLUDExstring(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 FilesMicrosoft Visual Studio 8VCINCLUDEstdexcept(48) : 請參閱所要編譯的類別 樣板 具現化 ‘std::basic_string<_Elem,_Traits,_Ax>’ 的參考
        with
        [
            _Elem=char,
            _Traits=std::char_traits<char>,
            _Ax=std::allocator<char>
        ]
C:Program FilesMicrosoft Visual Studio 8VCINCLUDEostream(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以前版本在使用的!

感謝你看到這裡,很快就可以離開了,但最好的獎勵行動就是按一下幫我分享或留言,感恩喔~

點我分享到Facebook

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。