1)disable
#pragma warning (disable: 4311 4312) //指標型別強制轉化,大小不完全匹配
warning c4311: 'type cast' : pointer truncation from 'trinode *const ' to 'long'
warning c4312: 'type cast' : conversion from 'unsigned int' to 'sac_node_add *' of greater size
注: 64位程式設計時,c4311的警告要處理,c412可以不處理.
#pragma warning (disable: 4244 4267) //丟失資料,4244為已知型別,4267為64位型別轉化
warning c4244: '=' : conversion from 'long' to 'char', possible loss of data
warning c4267: '=' : conversion from 'size_t' to 'long', possible loss of data
#pragma warning (disable: 4996) //安全警告
warning c4996: 'fopen' was declared deprecated
2)msvcr80d.dll
fat32的檔案系統的時間戳有問題,ntfs分割槽下就沒這個問題.
3)除錯引數選項
a)行號設定: tools->options->text editor->c/c++, display: line numbers勾選上
b)除錯變數中使用10進製數字: 在偵錯程式視窗中右擊,16進製制顯示勾去掉.
c)工作路徑: 右擊工程屬性頁property page,general-->output directory;
d)可執行程式: 右擊工程屬性頁property page, debugging-->command;
e)設定預編譯標頭檔案: 現象:fatal error c1010: unexpected end of file while looking for precompiled header directive,
解決方法: 右擊專案工程中的該cpp檔案,property page, c/c++-->precompiled headers,選擇第一項,不使用預編譯標頭檔案;
4)除錯dll
不能進入到dll的source code中,解決方法如下:
一是clean-->rebuild; 二是設定專案依賴關係; 如果不行的話,就有可能是某個檔案的注釋或者其它莫名其妙的原因導致出錯,就對要進入的那個檔案重新分析,最好恢復到上次能進入的頁面看是什麼導致出錯.
5)64位數輸出
_int64 num1;
printf("%i64d", num1);
在gcc可用%ll直接得到64位輸出. typedef long long _int64;
note:vc下不支援long long資料型別,只能使用ms的_int64,下面分別是vc下64的無符號,有符號,16進製制輸出格式
#define host_widest_int_print_dec "%i64d"
#define host_widest_int_print_unsigned "%i64u"
#define host_widest_int_print_hex "0x%i64x"
6)winsock2.h與windows.h重定義的問題
a)方案1: 在windows.h前加 巨集定義win32_lean_and_mean
#define win32_lean_and_mean //此巨集用來加快載入windows.h,可以少包含一些較少使用的標頭檔案
#include
b)方案2: 在 windows.h 前先 winsock2.h
7)怎麼使用mfc庫? (輕量級的使用).
假設: 在乙個windows console程式中,後來要使用mfc的字串模板類cstring,但不需增加太多的mfc其它類.
方法:
a)先在vc專案選單-> property -> general -> use of mfc中,選用: use mfc in a share dll;
b)生成乙個stdafx.h,在這個標頭檔案中,只包括
#include // mfc core and standard components
如果使用了socket函式,則
#include //instead of
//其它需要新增的結構或標頭檔案...
8)error
a)要注意變數的生存週期,在for,while語句裡的變數如果下面還要使用,那麼此變數要提前到語句之前申明;
b)xx)檔案io要注意的問題
a)檔案控制代碼: 數字的檔案描述符,乙個程序能開啟的所有檔案控制代碼總數是有限制的,經測試<1024(系統限制數),此外,程序關閉,所有此程序開啟的檔案控制代碼自動關閉;檔案控制代碼是可重用的,每次得到的檔案控制代碼一定是最小的未用的;所以同一執行緒不斷開啟關閉,可能獲得控制代碼指標是一樣的,而且執行緒id也可能一樣;
b)io的效率: 最好buffsize的大小與檔案塊長相同,如常見的8k一塊的檔案系統,效率最高;
c)檔案共享:核心維護三種資料結構:程序表項,檔案表項,檔案節點結構;此三張表構成了檔案與程序之間的關係.也是理解檔案讀寫加鎖的關鍵; 注意每個程序都在程序表項中占有乙個位置,每個程序都指向乙個程序相關的開啟檔案表項,而每個檔案維護乙個檔案節點結構.所以,各程序獨享的變數是檔案描述符,開啟檔案的檔案狀態標誌,當前檔案偏移位置;而每個檔案的檔案長度,所有者,裝置,磁碟中的位置指標等是各程序共享變數.
d)檔案路徑:用./來表示下層目錄,也可用.//來表示,/是轉義符,表示'/'要用'//'.
e)鎖的技巧:檔案級,位元組級;
f)函式的使用技巧:
不帶快取的io是指系統呼叫函式:read,write,lseek,open,close...
多程序讀同乙個檔案能正常工作,因為每個程序各有自己的檔案表項,當中有自己的檔案位移量;但多程序同寫乙個檔案則可能會出錯,因此要把lseek,write作為乙個原子操作.在windows平台,執行緒與程序在核心是等同的(?),所以多程序操作類似多執行緒.
faq1: 多級指標初始化
a) long* m_ltest1= new long;
b) long** m_cppvalue1;
m_cppvalue1 = new long* [3];
for(i = 0; i < 3; i++)
c) long*** m_cppvalue;
m_cppvalue = new long**[m];
for(i = 0; i < m; i++)
}//釋放記憶體時的順序剛好相反,先刪除最低層元素空間.
for(i = 0; i < m; i++)
if(m_cppvalue[i]) delete m_cppvalue[i];
}if(m_cppvalue) delete m_cppvalue;
解決 vc 2008 無法除錯問題
除錯時出現 tintermediate.manifest general error c1010070 failed to load and parse the manifest.0v 去google尋找 在 feifei zhang at 126的部落格 中找到 1.debug first.exe...
程式除錯問題
問題1 呼叫了matlab的一些lib檔案,修改屬性表中的目錄等,參考opencv配置 問題2 dll檔案 執行,缺少哪個就是將相應的那個新增在工程中 問題3 如果在這個工程中呼叫了opencv封裝的函式,如何進入子函式 將呼叫到的.c h檔案新增在工程中,新增標頭檔案,然後設定斷點,編譯。2.li...
Andorid ADB除錯問題
1 問題 在命令列視窗輸入 adb shell 出現以下結果 daemon not running.starting it now on port 5037 createprocess failure,error 2等。原因 由於c windows system目錄下含有adb.exe檔案,該檔案與...