1、?????????
如何快速地
規
范代
碼縮進
格式
選
中所需要
規
范的代
碼
,按shift+F8
2、?????????
如何在Release
狀態
下
進
行
調試
Project->Setting=>ProjectSetting
對話
框,
選擇
Release
狀態
。C/C++
標簽
中的Category
選
General,Optimizations
選
Disable(Debug),Debut info
選
Program Database。在Link
標簽
中
選
中Generate debug info
復選
框。
注:只是一
個
介乎Debug合Release的中
間狀態
,所有的ASSERT、VERIFY都不起作用,函
數調
用方式已
經
是
真
正的
調
用,而不
查
表,但是
這種狀態
下QuickWatch、
調
用
隊
列跟蹤功能仍然有效,和Debug版一
樣
。
3、?????????
Release和Debug有什
么
不同。
Release版
稱為發
行版,Debug版
稱為調試
版。
Debug中可以
單
步
執
行、跟蹤等功能,但生成的可
執
行文件比
較
大,代
碼運
行速度
較
慢。Release版
運
行速度
較
快,可
執
行文件
較
小,但在其
編譯條
件小無法
執
行
調試
功能。
Release的exe文件
鏈
接的是
標
準的MFC DLL(Use MFC in a shared or static dll),比如MFC42.DLL。
這
些DLL在安裝Windows的
時
候,已
經
配置,所以
這
些程序能
夠
在
沒
有安裝Visual C++ 6.0的機器上
運
行。而Debug版本的exe
鏈
接了
調試
版本的MFC DLL文件,如MFC42D.DLL。在
沒
有安裝Visual C++6.0的機器上不能
運
行,因
為
缺MFC42D.DLL等,除非
選擇
use static dll when link。
4、?????????
ASSERT和VERIFY有什
么區別
ASSERT里面的
內
容在Release版本中不
編譯
,VERIFY里面的
內
容仍然翻
譯
,但不再判
斷真
假。所以后者更安全一點。
例如ASSERT(file.Open(strFileName))。
一旦到了Release版本中,
這
一行就忽略了,file根本就不Open()了,而且
沒
有任何出
錯
的信息。如果用VERIFY()就不
會
有
這個問題
。
5、?????????
Workspace和Project之
間
是什
么樣
的
關
系
每
個
Workspace可以包括幾
個
project,但只有一
個處
于Active
狀態
,各
個
project之
間
可以有依
賴關
系,在project的Setting..中可以
設
定,比如那
個
Active
狀態
的project可以依
賴
于其他的提供其函
數調
用的
靜態庫
。
6、?????????
如何在非MFC程序中使用ClassWizard
在工程目
錄
下新建一
個
空的.RC文件,然后加入到工程中就可以了。
7、?????????
如何
設
置
斷
點
按F9在
當
前光
標處
增加一
個斷
點和取消一
個斷
點。
另外,在
編輯狀態
下,按Ctrl+B
組
合
鍵
,
彈
出
斷
點
設
置
對話
框。然后
單擊
【Condition…】按
鈕彈
出
設
置
斷
點
條
件的
對話
框
進
行
設
置。
8、?????????
在
編輯狀態
下
發現成員變量或函數不能顯示提示是如何打開顯示功能
這
似乎是目前
這個
Visual C++ 6.0版本的一
個
bug,可按如下步
驟
使其正常,如再出
現
,可如法炮制:
(1)????????????
關閉
Project
(2)????????????
刪
除“工程名.ncb”文件
(3)????????????
重新打
開
工程
9、?????????
如何
將
一
個
通
過
ClassWizard生成的
類徹
底
刪
除
首先在工作
區
的FileView中
選
中
該類
的.h和.cpp文件,按delete
刪
除,然后在文件管理器中
將這兩個
文件
刪
除,再
運
行ClassWizard,
這時
出
現
是否移走
該類
的提示,
選擇
remove就可以了。
10、????
如何
將
再workspace中消失的
類
找出
來
打
開該類對應
的
頭
文件,然后
將
其
類
名
隨
便改一下,
這個時
候工作
區
就
會
出
現
新的
類
,再
將這個類
改回原
來
的名字就可以了。
11、????
如何
清
楚所有的
斷
點
菜
單
【Edit】->【Breakpoints…】,打
開
“Breakpoints”
對話
框,
單擊
【Remove All】按
鈕
即可。
快捷
鍵
是“Ctrl + Shift + F8”。
12、????
如何再ClassWizard中
選擇
未列出的信息
打
開
“ClassWizard”
對話
框,然后切
換
到“Class Info”
頁
面。改
變
“Message filter”,如
選擇
“Window”,“Message”
頁
面就
會
出
現
Window的信息。
13、????
如何
檢測
程序中的括
號
是否匹配
把光
標
移
動
到需要
檢測
的括
號
前面,按快捷
鍵
“Ctrl + ]”。如果括
號
匹配正確,光
標
就跳到匹配的括
號處
,否
則
光
標
不移
動
,
并
且機箱喇叭
還會發
出一
聲
警告。
14、????
如何
查
看一
個
宏(或
變
量、函
數
)的定
義
把光
標
移
動
到要
查
看的一
個
宏上,就比如
說
最常
見
的DECLARE_MAP_MESSAGE上按一下F12(或右
鍵
菜
單
中的相
關
菜
單
),如果
沒
有建立
瀏覽
文件,就
會
出
現
提示
對話
框,按【確定】按
鈕
,然后就
會
跳到
該
宏(或
變
量、函
數
)定
義
的地方。
15、????
如何添加
Lib
文件到當前工程
單擊菜單【
Project
】-
>
【
Settings…
】彈出“
Project Setting
”對話框,切換到“
Link
”標簽頁,在“
Object/library modules
”處輸入
Lib
文件名稱,不同的
Lib
之間用空格格開。
16、????
如何快速刪除項目下的
Debug
文件夾中臨時文件
在工作區的
FileView
視圖中選中對應的項目,單擊右鍵彈出菜單,選擇【
Clean(selection only)
】菜單即可。
17、????
如何快速生成一個現有工程除了工程名外完全相同的新工程。
在新建工程的“
New
”對話框中選擇“
Custom Appwizard
”項,輸入新工程的名字,單擊【
OK
】按鈕。出現“
Custom AppWizard
”項,輸入新工程的名字,單擊【
OK
】按鈕。出現“
Custom AppWizard
-
Step 1 of 2
”對話框,選擇“
An existing Project
”項,單擊【
Next
】按鈕。出現“
Custom AppWizard
-
Step 2 of 2
”對話框,選擇現有工程的工程文件名,最后單擊【
Finish
】按鈕。編譯后就生成一個與現有工程相同但可以重新取名的工程
AppWizard
。
現在就可以項用
MFC AppWizard
一樣用這個定制的向導。如果不想用了,可以在
Visual C++ 6.0
安裝目錄下
Common
\
MSDev98
\
Template
目錄中刪除該
Wizard
對應的
.awx
和
.pdb
文件。
18、????
如何解決
Visual C++ 6.0
不正確連接的問題
情景:明明之間改動了一個文件,卻要把整個項目全部重新編譯鏈接一次。剛剛鏈接好,一運行,有提示重新編譯鏈接一次。
這是因為出現了未來文件
(
修改時間和創建時間比系統時間晚
)
的緣故。可以這樣處理:找到工程文件夾下的
debug
目錄,將創建和修改時間都比系統時間的文件全部刪除,然后再從新“
Rebuild All
”一次。
19、????
引起
LNK2001
的常見錯誤都有哪些
遇到的
LNK2001
錯誤主要為:
unresolved external symbol “symbol”
如果鏈接程序不能在所有的庫和目標文件內找到所引用的函數、變量或標簽,將產生此錯誤信息。
一般來說,發生錯誤的原因有兩個:一時所引用的函數、變量不存在,拼寫不正確或者使用錯誤;其次可能使用了不同版本的鏈接庫。一下是可能產生
LNK2001
錯誤的原因:
<1>
由于編碼錯誤導致的
LNK2001
錯誤
(1)????????????
不相匹配的程序代碼或模塊定義
(.DEF)
文件導致
LNK2001
。例如,如果在
C++
源文件了內聲明了一變量“
var1
”,卻視圖在另一個文件內以變量“
var1
”訪問改變量。
(2)????????????
如果使用的內聯函數是在
.cpp
文件內定義的,而不是在頭文件內定義將導致
LNK2001
錯誤。
(3)????????????
調用函數是如果所用的參數類型頭函數聲明是的類型不符將會產生
LNK2001
錯誤。
(4)????????????
視圖從基類的構造函數或析構函數中調用虛擬函數時將會導致
LNK2001
錯誤。
(5)????????????
要注意函數和變量的可公用性,只有全局變量、函數時可公用的。靜態函數和靜態變量具有相同的使用范圍限制。當試圖從文件外部方位任何沒有在該文件內聲明的靜態變量時將導致編譯錯誤或
LNK2001
錯誤。
<2>
由于編譯和聯機的設置而造成的
LNK2001
錯誤
(1)????????????
如果編譯時使用的時
/NOD(/NODERAULTLIB)
選項,程序所需要的運行庫和
MFC
時將得到又編譯器寫入目標文件模塊,但除非在文件中明確包含這些庫名,否則這些庫不會北鏈接進工程文件。這種情況下使用
/NOD
將導致
LNK2001
錯誤
(2)????????????
如果沒有為
wWinMainCRTStartup
設定程序入口,在使用
Unicode
和
MFC
時講的到“
unresolved external on _WinMain@16
”的
LNK2001
錯誤信息。
(3)????????????
使用
/MD
選項編譯時,既然所有的運行庫都被保留在動態鏈接庫之內,源文件中對“
func”
的引用,在目標文件里即對“
__imp__func
”的引用。如果試圖使用靜態庫
LIBC.LIB
或
LIBCMT.LIB
進行鏈接,將在
__imp__func
上發生
LNK2001
錯誤。如果不使用
/MD
選項編譯,在使用
MSVCxx.LIB
鏈接時也會發生
LNK2001
錯誤。
(4)????????????
使用
/ML
選項編譯時,如用
LIBCMT.LIB
鏈接回在
_errno
上發生
LNK2001
錯誤。
(5)????????????
當編譯調試版的應用程序時,如果采用發行版模態庫進行鏈接也會產生
LNK2001
錯誤;同樣,使用調試版模態庫鏈接發行版應用程序時也會產生相同的錯誤。
(6)????????????
不同版本的庫和編譯器的混合使用也能產生問題,因為新版的庫里可能包含早先的版本沒有的符號和說明。
(7)????????????
在不同的模塊中使用內聯和非內聯的編譯選項能夠導致
LNK2001
錯誤。如果創建
C++
庫時打開了函數內聯
(/Ob1
或
/Ob2)
,但是在描述該函數的相應頭問卷安里卻關閉了函數內聯
(
沒有
inline
關鍵字
)
,只是將得到錯誤信息。為避免該問題的發生,應該在相應的頭文件中用
inline
關鍵字標志為內聯函數。
(8)????????????
不正確的
/SUBSYSTEM
或
ENTRY
設置也能導致
LNK2001
錯誤。
20、????
如何調試一個沒有源碼的
exe
文件調用的
dll
在
Visual C++ 6.0
中,進入“
Project Setting
”對話框然后選擇
Debug
標簽頁。通常
Visual Studio
默認“
executable for debug session
”為可執行文件名,但可以將他改成任何你想要的程序。甚至可以指定不同的工作目錄以及傳遞參數到你的程序。這個技術常用來調試
Dlls
、名字空間擴展、
COM
對象和其他從某些
EXE
以及從第三方的
EXE
中調用的
plug-in
程序。
21、????
Visual C++ 6.0
工程中的項目文件都表示什么。
.opt
:工程關于開發化境的參數文件。如工具條位置等信息。
.aps(AppStudio File)
資源輔助文件,二進制格式,一般不用去管他。
.clw
:
ClassWizard
信息文件,實際上是
INI
文件格式,又興趣可以研究一下。有時候
ClassWizard
出了問題,手工修改
CLW
文件可以解決。如果此文件不存在的話,每次用
ClassWizard
的時候回提示是否重建。
.dsp(DevelopStudio Project)
:項目文件,文本格式,不過不熟悉的或不要手工修改。
.dsw(DevelopStudio Workspace)
:是工作區文件,其他特點和
.dsp
差不多。
.plg
:是編譯信息文件,編譯時的
error
和
warning
信息文件
(
實際上時一個
html
文件
)
,一般用處不大。在單擊菜單【
Tool
】-
>
【
Option
】彈出的對話框里面有個選項可以控制這個文件的生成。
.hpj(Help Project)
:是生成幫助文件的工程,用
microsoft Help Compiler
可以處理。
.mdp(Microsoft DevStudio Project)
:是舊版本的項目文件,如果要打開此文件的話,回提示你是否轉換成新的
.dsp
格式。
.bsc
:是用于瀏覽項目信息的,如果用
Source Brower
的話舊必須又這個文件。如果不用這個功能的話,可以在
Project Options
里面去掉
Generate Browse Info File
,這樣可以加快編譯速度。
.map
是執行文件的影像信息記錄文件,除非對系統底層,這個文件一般用不著。
.pch(Pre-Compiled File)
:是與編譯文件,可以加快編譯速度,但是文件非常大。
.pdb(Program Database),
記錄了程序有關的一些數據和調試信息,在調試的時候可能有用。
.exp
:只有在編譯
DLL
的時候才會生成,記錄了
DLL
文件的一些信息,一般也沒有用。
.ncb
:無編譯瀏覽文件
(no compile browser)
。當自動完成功能出問題時可以刪除此文件。編譯工程后回自動生成。