vc編譯器設定
工欲善其事,必先利其器;要想用
vc開發出高效率程式,必須對
vc編譯器有充分的了解。如果我們已經習慣編譯器給我的預設設定,那麼現在起開始嘗試改變吧
!本篇文章(或者後續文章)講解
vc編譯器設定選項並沒有先後順序,只是作者在具體開發過程碰見了不同的編譯設定,進行深入了解,做此文章記錄。也希望讀到這篇文章的您有所收穫;本文章主要參考
msdn
,編譯器為
vc7.1
,作者只是新增一些通俗例子,或者翻譯部分英文內容,從而達到對編譯器設定的通俗理解。
1:
/gr(啟用執行時型別資訊)
說明:此選項
(/gr)
新增**以便在執行時檢查物件型別。當指定此選項時,編譯器定義
_cpprtti預處理器巨集。預設情況下,此選項被清除
(/gr–)。
在visual studio 開發環境中設定此編譯器選項
開啟此專案的「屬性頁」對話方塊。
單擊「c/c++」資料夾。
單擊「語言」屬性頁。
修改「啟用執行時型別資訊」屬性。
例子:我們使用typeid,在執行時刻獲的變數的型別
/eh[c][-]
此選項指定編譯器使用的異常處理模型。
/ehc
選項要求指定/ehs、/eha 或/gx。它通知編譯器假定externc 函式從不引發異常。
該選項可以用符號- 清除。例如,/ehsc- 解釋為/ehs /ehc-,並且等效於/ehs。
在visual studio 開發環境中設定此編譯器選項
開啟此專案的「屬性頁」對話方塊。
單擊「c/c++」資料夾。
單擊「**生成」屬性頁。
修改「啟用c++ 異常」屬性。 或者
單擊「c/c++」資料夾。
單擊「**生成」屬性頁。
將「啟用c++ 異常」設定為「否」。
單擊「命令列」屬性頁。
在「附加選項」框中鍵入編譯器選項。
/zc(一致性)
/zc 編譯器選項使您可以用 /ze指定標準行為。以下是/zc 編譯器選項列表:
/zc:forscope
/zc:wchar_t
(1
):/zc:forscope
(強制for
迴圈範圍中的一致性)
ms標準行為是使for迴圈的初始值設定項在for迴圈之後超出範圍。在 /ze下,for迴圈的初始值設定項保持在範圍內,直到區域性範圍結束。
可以用conform 雜注修改/zc:forscope 的執行時行為。
如果在具有現有.pch 檔案的專案中使用/zc:forscope,則忽略/zc:forscope(伴有警告),並繼續用現有的.pch 檔案編譯。如果需要生成新的.pch 檔案,請使用 /yc。
在visual studio 開發環境中設定此編譯器選項
開啟此專案的「屬性頁」對話方塊。
單擊「c/c++」資料夾。
單擊「語言」屬性頁。
修改「強制for 迴圈範圍中的一致性」屬性。
例子說明:
下列**將在/ze 下編譯,但不在/za 下編譯:
int main()
}使用/zc:forscope 時,如果變數因為存在乙個在以前的範圍內所做的宣告而處在範圍內,則將得到警告。為了說明這點,請移除上面**中的
//
字元以宣告int i
。
(2
)/zc:wchar_t
(wchar_t
是本機型別)
如果未指定/zc:wchar_t,則編譯器要求您或者定義wchar_t,或者包括定義wchar_t的眾多標頭檔案中的乙個檔案(例如wchar.h)。wchar_t通常定義為unsigned short。
在指定/zc:wchar_t 編譯器選項時,型別wchar_t成為對映到__wchar_t的本機型別,其對映方式與short對映到__int16相同。
如果使用/zc:wchar_t,編譯器將wchar_t識別為本機型別。有關wchar_t 的更多資訊,請參見資料型別範圍。
__wchar_t
始終可用。
通過同時為wchar_t 的無符號短格式和__wchar_t 變體提供過載,您可以建立能夠輕鬆通過用(或未用)/zc:wchar_t 編譯的**鏈結的庫,並且無需提供該庫的兩個不同的版本(啟用和未啟用/zc:wchar_t 的版本)。
指定/zc:wchar_t 時,定義_wchar_t_defined和_native_wchar_t_defined符號;有關更多資訊,請參見預定義巨集。
在visual studio 開發環境中設定此編譯器選項
開啟此專案的「屬性頁」對話方塊。
單擊「c/c++」資料夾。
單擊「語言」屬性頁。
修改「將wchar_t 視為內建型別」屬性。
例子說明:
無
/ob(內聯函式展開)
/
ob
「
內聯函式展開」(/obn)
選項控制函式的內聯展開,其中 n
是下列之一:
選項
說明
/ob0
禁用內聯展開(預設情況下是開啟的)。
/ob1
只展開標記為inline 或__inline的函式,或在類宣告內定義的c++ 成員函式中的函式。
/ob2
展開標記為inline或__inline的函式和編譯器選擇的任何其他函式(由編譯器自行進行展開,通常稱作自動內聯)。 此選項要求使用/o1、/o2、/ox 或/og 啟用優化。
編譯器將內聯展開選項和關鍵字視為建議。不保證函式將內聯展開。無法強制編譯器內聯特定函式。
還可以使用#pragma auto_inline 將某些函式排除在作為內聯展開的候選函式而加以考慮的函式之外。另見#pragma intrinsic。
在visual studio 開發環境中設定此編譯器選項
開啟此專案的「屬性頁」對話方塊。
單擊「c/c++」資料夾。
單擊「優化」屬性頁。
修改「內聯函式展開」屬性。
例子說明:
1
:class a
;//
隱含inline模式
void fun()// 隱含inline模式
}
如上面的函式,在類或者結構體內定義的函式,將自動設定為inline模式
ms還有乙個關鍵字__forceinline(強制inline),使用這個關鍵字後,如果函式沒有被__forceinline將會產成一級警告(警告號是4714)
函式或者編譯器設定屬於下面的情況,使用inline,__inline,__forceinline將失效。
1:內聯模式(/ob0)關閉的(debug模式下預設設定)
2:函式和呼叫者使用不同異常型別的。
3:可變引數函式
4:函式使用inline關鍵字,但是沒有使用編譯設定/og(全域性優化), /ox(完全優化), /o1(最小化大小), or /o2(最小化速度).
5
:函式使用inline關鍵字,編譯選項沒有設定返回值檢查異常型別,編譯選項為/gx(
啟用異常處理
), /ehs, or /eha(
它通知編譯器假定externc
函式從不引發異常)6
:函式接受存在異常型別的拷貝構造物件,但是開啟為/gx(
啟用異常處理
), /ehs, or /eha(
它通知編譯器假定externc
函式從不引發異常)7
:函式是乙個迴圈體並且沒有使用#pragma inline_recursion(on)
指定的。(使用
pragma選項,迴圈體函式將inline,迴圈體內執行迴圈次數是8次,可以通過inline_depth設定) 8
:函式是虛函式,或者被虛函式呼叫。(直接呼叫虛函式被inline)
9:程式獲得乙個函式位址,並且通過指標訪問這個位址,函式被inlined的。
10:函式呼叫約定為
naked __declspec.
VC編譯器設定
工欲善其事,必先利其器 要想用 vc開發出高效率程式,必須對 vc編譯器有充分的了解。如果我們已經習慣編譯器給我的預設設定,那麼現在起開始嘗試改變吧 本篇文章 或者後續文章 講解 vc編譯器設定選項並沒有先後順序,只是作者在具體開發過程碰見了不同的編譯設定,進行深入了解,做此文章記錄。也希望讀到這篇...
VC編譯器設定
工欲善其事,必先利其器 要想用 vc開發出高效率程式,必須對 vc編譯器有充分的了解。如果我們已經習慣編譯器給我的預設設定,那麼現在起開始嘗試改變吧 本篇文章 或者後續文章 講解 vc編譯器設定選項並沒有先後順序,只是作者在具體開發過程碰見了不同的編譯設定,進行深入了解,做此文章記錄。也希望讀到這篇...
vc 編譯器環境變數設定
在cmd中使用vc編譯器需要設定三個環境變數 1 系統環境變數path加入 編譯器路路徑 bin 2 加入include環境變數 編譯器路徑 include 3 加入lib環境變數 編譯器路徑 lib 比如我的vc編譯器放在e developtool vc2010 path應加入e developt...