vc編譯開關
『壹』 VC++怎樣關閉和打開調試器
#ifndefNDEBUG//這里會在Debug配置下執行,直到#endif
NDEBUG 是標準的預定義宏,默認在Release版本下。
_DEBUG是Debug版本下的預定義標准宏。Debug模式下沒有NDEBUG這個宏。
因此,你這個程序,只要切換不同的編譯模式即可實現「開關」了。
切換方法:
你可以在Build工具條的組合框上選擇切換Release/Debug(如果工具條上沒有,在工具條空白處右鍵,選中Build),也可以在Build(組建)菜單的Set Active Configuration中切換。
注意,切換後要重新編譯,因為兩個模式下,編譯的路徑不同,生成的文件也不同。
『貳』 VC++編譯和組建按鈕變灰,無法繼續調試!請問各位大俠怎麼辦
這是VC++6.0的BUG,相信很多人都遇到過,這也是讓我非常不爽的地方,當VC++編譯和組建按鈕變灰的時候,只能調出任務管理器把它強制關掉,再打開項目,相信沒有人會一直等下去(此時建議多按幾次保存或把最近修改過的文件拷出來,雖然每次組建都會保存,但如果你修改得比較多,之前沒有保存,有可能會丟失最近的修改)可以使用vs2005或都vs2008替換vc++來解決這個問題,但vs2005和vs2008由於加入了.net框架的東西,使得IDE變得非常龐大,啟動或編譯會有點慢,所以一般的小程序小項目,我還是不得不選擇vc++,而且用得也比較熟了,所以有時候還是得忍一忍它。。。
『叄』 VC中的編譯工具欄沒有了怎麼跳出來
在工作欄的空白處,點右鍵,選擇Build, 如果是中文版的話,應該是 「編譯」
『肆』 為什麼每次編譯VC++程序都會彈出1083錯誤fatal error C1083: Cannot open
要想弄明白出現問題的原因還是先了解一下pch文件吧,參考一下資料:
預編譯頭文件(一般擴展名為.PCH),是把一個工程中較穩定的代碼預先編譯好放在一個文件(.PCH)里.這些預先編譯好的代碼可以是任何的C/C++代碼--甚至可以是inline函數,只它們在整個工程中是較為穩定的,即在工程開發過程中不會經常被修改的代碼.
為什麼需要預編譯頭文件?一言以蔽之:提高編譯速度.一般地,編譯器以文件為單位編譯,如果修改了一工程中的一個文件則所有文件都要重新編譯,包括頭文件里的所有東西(eg.Macro宏,Preprocessor預處理),而VC程序中,這些頭文件中所包括的東西往往是非常大的,編譯之將占很長的時間.但它們又不常被修改,是較穩定的,為單獨的一個小文件而重新編譯整個工程的所有文件導致編譯效率下降,因此引入了.PCH文件.
如何使用預編譯頭文件以提高編譯速度?要使用預編譯頭文件,必須指定一個頭文件(.H),它包含我們不會經常修改的代碼和其他的頭文件,然後用這個頭文件(.H)來生成一個預編譯頭文件(.PCH)VC默認的頭文件就是StdAfx.h,因為頭文件是不能編譯的,所以我們還需要一個.CPP文件來作橋梁,VC默認的文件為StdAfx.cpp,這個文件里只有一句代碼就是:#include "StdAfx.h".接下來要用它生成.PCH文件,涉及到幾個重要的預編譯指令:/Yu,/Yc,/Yx,/Fp.簡單地說,/Yc是用來生成.PCH文件的編譯開關.在Project->setting->C/C++的Category里的Precompiled Header,然後在左邊的樹形視圖中選擇用來編譯生成.PCH文件的.CPP文件(默認即StdAfx.cpp)你就可以看到/Yc這個開關,它表示這個文件編譯了以後是否生成.PCH文件(可能/Yc的c表示create)./Fp指令指定生成的.PCH文件的名字及路徑(可能/Fp的p代表path)./Yu的u即use使用,工程中只要包括了.H文件的文件都會有這個/Yu指令.如果選擇自動Automatic...的話則原來為/Yc的地方就換成了/Yx指令.如果選擇自動,則每次編譯時編譯器會看以前有沒有生成過.PCH文件,有則不現生成否則就再次編譯產生.PCH文件.
注意:
A,實際上,由Appzard項目向導生成的默認的頭文件及CPP文件StdAfx.h和StdAfx.cpp可以是任何名字的.原因很簡單.但如果你要這樣做就要記得修改相應的Project->setting...下的幾個預編譯指令(/Yc,/Yu,/Yx,/Fp)的參數.
B.在任何一個包括了將要預編譯的頭文件而使用了.PCH文件的工程文件的開頭,一定必須要是在最開頭,你要包含那個指定生成.PCH文件的.H文件(通過.CPP文件包括,默認為StdAfx.cpp),如果沒包括將產生我最開頭產生的錯誤.如果不是在最開頭包括將產生讓你意想不到的莫名其妙錯誤,如若不信,盍為試之?
C.預編譯文件.PCH生成之很耗時間,而且生成之後它也很占磁碟空間,常在5-6M,注意項目完成之後及時清理無用的.PCH文件以節約磁碟空間.
D.如果丟了或刪了.PCH文件而以後要再修改工程文件時,可將指定的/Yc的.CPP文件(默認為StdAfx.cpp)重新編譯一次即可再次生成.PCH文件,不用傻傻的按F7或Rebuild All
本來想結合你的問題給你整理一下,呵呵 沒有時間了,你看了上面的資料還處理不了,繼續提問吧。
『伍』 vc++使用編譯開關(編譯器選心)
打開工程屬性->C/C++->預處理指令->把你的編譯開關所用的關鍵字加入到預處理定義欄里。
見截圖。
『陸』 vc的各編譯選項都是什麼意思
VC編譯選項
/Od 禁用優化(默認值) disable optimizations (default)
/Ox 最大化選項。(/Ogityb2 /Gs) maximum opts. (/Ogityb1 /Gs)
/Og 啟用全局優化 enable global optimization
/Oy[-] 啟用框架指針省略 enable frame pointer omission
/Oi 啟用內建函數 enable intrinsic functions
-代碼生成-
/G3 為 80386 進行優化 optimize for 80386
/G4 為 80486 進行優化 optimize for 80486
/GR[-] 啟用 C++ RTTI enable C++ RTTI
/G5 為 Pentium 進行優化 optimize for Pentium
/G6 為 Pentium Pro 進行優化 optimize for Pentium Pro
/GX[-] 啟用 C++ 異常處理(與 /EHsc 相同) enable C++ EH (same as /EHsc)
/EHs 啟用同步 C++ 異常處理 enable synchronous C++ EH
/GD 為 Windows DLL 進行優化 optimize for Windows DLL
/GB 為混合模型進行優化(默認) optimize for blended model (default)
/EHa 啟用非同步 C++ 異常處理 enable asynchronous C++ EH
/Gd __cdecl 調用約定 __cdecl calling convention
/EHc extern「C」默認為 nothrow extern "C" defaults to nothrow
/Gr __fastcall 調用約定 __fastcall calling convention
/Gi[-] 啟用增量編譯 enable incremental compilation
/Gz __stdcall 調用約定 __stdcall calling convention
/Gm[-] 啟用最小重新生成 enable minimal rebuild
/GA 為 Windows 應用程序進行優化 optimize for Windows Application
/Gf 啟用字元串池 enable string pooling
/QIfdiv[-] 啟用 Pentium FDIV 修復 enable Pentium FDIV fix
/GF 啟用只讀字元串池 enable read-only string pooling
/QI0f[-] 啟用 Pentium 0x0f 修復 enable Pentium 0x0f fix
/Gy 分隔鏈接器函數 separate functions for linker
/GZ 啟用運行時調試檢查 enable runtime debug checks
/Gh 啟用鉤子函數調用 enable hook function call
/Ge 對所有函數強制堆棧檢查 force stack checking for all funcs
/Gs[num] 禁用堆棧檢查調用 disable stack checking calls
-輸出文件-
/Fa[file] 命名程序集列表文件 name assembly listing file
/Fo 命名對象文件 name object file
/FA[sc] 配置程序集列表 configure assembly listing
/Fp 命名預編譯頭文件 name precompiled header file
/Fd[file] 命名 .PDB 文件 name .PDB file
/Fr[file] 命名源瀏覽器文件 name source browser file
/Fe 命名可執行文件 name executable file
/FR[file] 命名擴展 .SBR 文件 name extended .SBR file
/Fm[file] 命名映射文件 name map file
-預處理器-
/FI 命名強制包含文件 name forced include file
/C 不吸取注釋 don't strip comments
/U 移除預定義宏 remove predefined macro
/D{=|#} 定義宏 define macro
/u 移除所有預定義宏 remove all predefined macros
/E 將預處理定向到標准輸出 preprocess to stdout
/I 添加到包含文件的搜索路徑 add to include search path
/EP 將預處理定向到標准輸出,不要帶行號 preprocess to stdout, no #line
/X 忽略「標准位置」 ignore "standard places"
/P 預處理到文件 preprocess to file
-語言-
/Zi 啟用調試信息 enable debugging information
/Zl 忽略 .OBJ 中的默認庫名 omit default library name in .OBJ
/ZI 啟用調試信息的「編輯並繼續」功能 enable Edit and Continue debug info
/Zg 生成函數原型 generate function prototypes
/Z7 啟用舊式調試信息 enable old-style debug info
/Zs 只進行語法檢查 syntax check only
/Zd 僅要行號調試信息 line number debugging info only
/vd{0|1} 禁用/啟用 vtordisp disable/enable vtordisp
/Zp[n] 在 n 位元組邊界上包裝結構 pack structs on n-byte boundary
/vm 指向成員的指針類型 type of pointers to members
/Za 禁用擴展(暗指 /Op) disable extensions (implies /Op)
/noBool 禁用「bool」關鍵字 disable "bool" keyword
/Ze 啟用擴展(默認) enable extensions (default)
- 雜項 -
/?, /help 列印此幫助消息 print this help message
/c 只編譯,不鏈接 compile only, no link
/W 設置警告等級(默認 n=1) set warning level (default n=1)
/H 最大化外部名稱長度 max external name length
/J 默認 char 類型是 unsigned default char type is unsigned
/nologo 取消顯示版權消息 suppress right message
/WX 將警告視為錯誤 treat warnings as errors
/Tc 將文件編譯為 .c compile file as .c
/Yc[file] 創建 .PCH 文件 create .PCH file
/Tp 將文件編譯為 .cpp compile file as .cpp
/Yd 將調試信息放在每個 .OBJ 中 put debug info in every .OBJ
/TC 將所有文件編譯為 .c compile all files as .c
/TP 將所有文件編譯為 .cpp compile all files as .cpp
/Yu[file] 使用 .PCH 文件 use .PCH file
/V 設置版本字元串 set version string
/YX[file] 自動的 .PCH 文件 automatic .PCH
/w 禁用所有警告 disable all warnings
/Zm 最大內存分配(默認為 %) max memory alloc (% of default)
-鏈接-
/MD 與 MSVCRT.LIB 鏈接 link with MSVCRT.LIB
/MDd 與 MSVCRTD.LIB 調試庫鏈接 link with MSVCRTD.LIB debug lib
/ML 與 LIBC.LIB 鏈接 link with LIBC.LIB
/MLd 與 LIBCD.LIB 調試庫鏈接 link with LIBCD.LIB debug lib
/MT 與 LIBCMT.LIB 鏈接 link with LIBCMT.LIB
/MTd 與 LIBCMTD.LIB 調試庫鏈接 link with LIBCMTD.LIB debug lib
/LD 創建 .DLL Create .DLL
/F 設置堆棧大小 set stack size
/LDd 創建 .DLL 調試庫 Create .DLL debug libary
/link [鏈接器選項和庫] [linker options and libraries]
『柒』 如何在VC中編譯代碼時,通過傳入宏開關值得到不同的軟體版本
工程的選項中加入你的開關
然後再代碼中
#ifdef XXX
#endif
『捌』 VC++6.0中的兩個編譯按鈕有什麼區別
第一個是Compile,是編譯,編譯當前顯示的文件
第二個是Build,是編譯工程內所有需編譯文件並連接編譯好的obj文件,生成可執行程序。
『玖』 vc上怎麼調試c#release版程序
Debug通常稱為調試版本,它包含調試信息,並且不作任何優化,便於程序員調試程序。Release稱為發布版本,它往往是進行了各種優化,使得程序在代碼大小和運行速度上都是最優的,以便用戶很好地使用。
Debug
和
Release
的真正秘密,在於一組編譯選項。下面列出了分別針對二者的選項(當然除此之外還有其他一些,如/Fd
/Fo,但區別並不重要,通常他們也不會引起
Release
版錯誤,在此不討論)
Debug
版本
參數
含義
/MDd
/MLd
或
/MTd
使用
Debug
runtime
library
(調試版本的運行時刻函數庫)
/Od
關閉優化開關
/D
"_DEBUG"
相當於
#define
_DEBUG,打開編譯調試代碼開關
(主要針對assert函數)
/ZI
創建
Edit
and
continue(編輯繼續)資料庫,這樣在調試過程中如果修改了源代碼不需重新編譯
/GZ
可以幫助捕獲內存錯誤
/Gm
打開最小化重鏈接開關,
減少鏈接時間
Release
版本
參數
含義
/MD
/ML
或
/MT
使用發布版本的運行時刻函數庫
/O1
或
/O2
優化開關,使程序最小或最快
/D
"NDEBUG"
關閉條件編譯調試代碼開關
(即不編譯assert函數)
/GF
合並重復的字元串,
並將字元串常量放到只讀內存,
防止被修改
實際上,Debug
和
Release
並沒有本質的界限,他們只是一組編譯選項的集合,編譯器只是按照預定的選項行動。事實上,我們甚至可以修改這些選項,從而得到優化過的調試版本或是帶跟蹤語句的發布版本。
OK,知道了這些,誰還會說RELEASE版本不能調試?
只需要設置相應編譯環境,RELEASE同樣可以像DEBUG版本設置斷點,查看參數。
步驟如下:
1、在Project
Settings里選Settings
For為All
Configurations。
2、在C/C++標簽中,Debug
info
選
Program
Database。
3、在Link
標簽中,Category選
Debug,選中Debug
info
復選框和Microsoft
format。
現在就可以像在Debug版本中那樣設置斷點進行測試了,但是記住,Release版本由於代碼優化,有些變數是觀察不到的,行的運行順序可能也會不同。