從事c++開發工作已有三四年之久,之前一直都是埋頭專心幹活。三年前的狀態幾乎是待在公司的實驗室裡有種兩耳不聞窗外事,一心只繫正在研發的系統。現在慢慢的空閒下來了,就趁著空閒的時間,把以前的遇到的問題好好整理進行反思反思。同時在反思的過程中也研究研究最近流行的新技術。以下幾點是我在開發過程中的幾點總結(還不全面),總結得不對的地方也希望大家能指出。
以下是我在開發程式設計過程中的幾點總結:
1.程式設計時盡量用指標
2.少用動態分配(new或malloc),如果用到的話要到最後用完了才釋放
3.避免在迴圈中開啟執行緒
4.盡量避免執行緒的巢狀使用
5.檢查**的時候要看清楚上下文之間資料的聯絡與變化
6.寫**的風格要保持一致
7.寫**的時候對自己的要求要高一些
8.要慎用二級指標(即指標的指標),及其容易造成記憶體的洩漏,而且無法確實的控制。當二維陣列的列數不確定的時候才建議使用二級指標,如果二級指標需要傳參,最好是將其轉換成一級指標傳出。
9.浮點數的比較不能直接等於進行比較,因為浮點數沒有0, 要判斷乙個浮點數是否等於0 ,可以進行一下操作
float a=0.0;
if ((a-(1/(10e+10)<0) //判斷 a 是否等於0
10.解決網路大小端呼叫的函式:
hotns()——"host to network short",主機位元組順序轉換為網路位元組順序(對無符號短型進行操作 4bytes)
htonl()——"host to network long",主機位元組順序轉換為網路位元組順序(對無符號長型進行操作 8bytes)
ntons()——"network to host short",網路位元組序轉換為主機位元組順序(對無符號短型進行操作 4bytes)
ntohl()——"network to host long",網路位元組順序轉換為主機位元組順序(對無符號長型進行操作 8bytes)
12. 遇到double free 的問題時首先要先自己認真檢查, 不能急躁 。有懷疑精神是好的,但前提是你得先證明清楚才能下結論。
13.socket 通訊要認真閱讀每個函式的返回值說明,不能只想不動去驗證。
14.tcp/ip 和udp/ip的區別使用前好好想想,再決定是用哪個,tcp 的recv()函式如果要接收指定大小的,則可將引數flag的值設定為 msg_waitall。
15. socket 通訊 send () 和recv () 函式返回的都是真正傳送或接收到的資料的大小,可以通過該返回值對程式進行控制。
16. 當除錯**無法接著進行下去時,不妨停下來看看書,然後再去除錯。切記不要在腦子不清晰的時候去除錯**,那樣是在浪費時間,不但效率低,而且也會把整個人的情緒弄得很糟。
17.#define 和 const 常量不是同一回事, #define是替換,而c++常量不是
const:有資料型別,編譯進行安全檢查,可除錯
define:巨集,不考慮資料型別,沒有安檢,不能除錯
18.盡量到官網查詢api等資料
19.優化**,減少重複計算,減少陣列下標操作,盡量用指標進行。
20.指標轉換 例子: int * i 轉換成 void * a = (void *) i; int *i 轉換成 void ** b = (void **)&i
程式設計總結1
7 1 列印沙漏 20 分 本題要求你寫個程式把給定的符號列印成沙漏的形狀。例如給定17個 要求按下列格式列印 所謂 沙漏形狀 是指每行輸出奇數個符號 各行符號中心對齊 相鄰兩行符號數差2 符號數先從大到小順序遞減到1,再從小到大順序遞增 首尾符號數相等。給定任意n個符號,不一定能正好組成乙個沙漏。...
程式設計總結(1)
本題要求你寫個程式把給定的符號列印成沙漏的形狀。例如給定17個 要求按下列格式列印 所謂 沙漏形狀 是指每行輸出奇數個符號 各行符號中心對齊 相鄰兩行符號數差2 符號數先從大到小順序遞減到1,再從小到大順序遞 增 首尾符號數相等。給定任意n個符號,不一定能正好組成乙個沙漏。要求列印出的沙漏能用掉盡可...
socket程式設計總結 1
使用socket寫 主要是要看自己的需求是什麼。如果通訊時,內容很重要就要使tcp方式。如果使用者數太多,可能就要使用udp方式了。在tcp模式下,最簡單的方式就是這樣的,使阻塞方式 服務端 1.初始化socket環境,建立socket 2.梆定乙個埠 3.開始監聽 4.接收客戶端 5.接收到客戶端...