看到新公司的爛代碼,簡直沒法看,又不好給別人直接提出來,顯得很狂妄。
寫點心得,同大家討論,大家一點點的補充!
在寫代碼的過程中,要一點點的把公共的東西都剝離開來,儘管開始的時候不是很明顯,
沒關係,發現可以復用的東西后,哪怕能節省10行程序,也要這麼做,因為你
很快就會發現,不單單是10行的問題,而是調用次數×10,並且你還會發現在你以後對
功能的擴展和修改會起到很大的幫助。
例子:
當發現你要寫的函數在其它函數的已經實現了部分功能的時候,千萬不要把它抄過來,
而是把那個已經存在的函數分開。
MultiUse(int arg1, int arg2)
{
int a;
int b;
int c;
.....
a = b = c = 10;
}
改成:
MultiUse(int arg1, int arg2)
{
int a;
int b;
int c;
.....
__MultiUse(&a, &b, &c);
}
儘量不要使用全局變量,如果使用全局變量,也不要把全局變量定義在頭文件中並且應使用static 全局變量,
其它文件中的函數如果要對其訪問,那麼提供一組extern函數。
例子:
static unsigned int WindowType;
unsigned int GetWindowType()
{
return WindowType;
}
void SetWindowType(unsigned int type)
{
WindowType = type;
}
原則上講,有返回值的函數一定要進行錯誤處理,儘量不要利用函數的返回值作為下一步的選擇條件,
除非函數不需要進行錯誤判斷並且函數的工作就是返回一系列的類型
switch(GetType())
{
case 'A':
case 'B':
}
對於有返回值的函數在出錯後 要return -1等小於零的值,成功return 0;
對於一個指針類型的話是NULL和非NULL,這是一個不成文的規定。
對於函數錯誤的處理儘量在選擇結構的第一個分支中,否則在海量的代碼中會讓人莫名其妙。
if (BeginTrancation() < 0) {
/* 錯誤處理 */
abort();
return -1;
}
不要小看strcpy,strcmp和strlen、memcpy此類函數的效率,運行1000000次你看看多長時間,
在對效率要求較高的情況下應儘量減少此類操作而更應用指針來進行。
大的程序中不要使用fopen類的函數,尤其是在程序需要打開大量的文件的時候,因為fopen類的函數
在內核中是同256以下的文件描述字關聯的,一旦打開很多文件後,256以下沒有可用的文件描述
字後,fopen就會失敗。
0 意見 (+add yours?)
張貼留言