日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

编程修养(六)

發(fā)布時間:2023/12/15 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 编程修养(六) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
23、static的使用
————————
static關(guān)鍵字,表示了“靜態(tài)”,一般來說,他會被經(jīng)常用于變量和函數(shù)。一個static的變量,其實就是全局變量,只不過他是有作用域的全局變量。比如一個函數(shù)中的static變量:


char*
getConsumerName()
{
? ? static int cnt = 0;
? ??
? ? ....
? ? cnt++;
? ? ....
}


cnt變量的值會跟隨著函數(shù)的調(diào)用次而遞增,函數(shù)退出后,cnt的值還存在,只是cnt只能在函數(shù)中才能被訪問。而cnt的內(nèi)存也只會在函數(shù)第一次被調(diào)用時才會被分配和初始化,以后每次進(jìn)入函數(shù),都不為static分配了,而直接使用上一次的值。


對于一些被經(jīng)常調(diào)用的函數(shù)內(nèi)的常量,最好也聲明成static(參見第12條)


但static的最多的用處卻不在這里,其最大的作用的控制訪問,在C中如果一個函數(shù)或是一個全局變量被聲明為static,那么,這個函數(shù)和這個全局變量,將只能在這個C文件中被訪問,如果別的C文件中調(diào)用這個C文件中的函數(shù),或是使用其中的全局(用extern關(guān)鍵字),將會發(fā)生鏈接時錯誤。這個特性可以用于數(shù)據(jù)和程序保密。


?


24、函數(shù)中的代碼尺寸
——————————
一個函數(shù)完成一個具體的功能,一般來說,一個函數(shù)中的代碼最好不要超過600行左右,越少越好,最好的函數(shù)一般在100行以內(nèi),300行左右的孫函數(shù)就差不多了。有證據(jù)表明,一個函數(shù)中的代碼如果超過500行,就會有和別的函數(shù)相同或是相近的代碼,也就是說,就可以再寫另一個函數(shù)。


另外,函數(shù)一般是完成一個特定的功能,千萬忌諱在一個函數(shù)中做許多件不同的事。函數(shù)的功能越單一越好,一方面有利于函數(shù)的易讀性,另一方面更有利于代碼的維護(hù)和重用,功能越單一表示這個函數(shù)就越可能給更多的程序提供服務(wù),也就是說共性就越多。


雖然函數(shù)的調(diào)用會有一定的開銷,但比起軟件后期維護(hù)來說,增加一些運(yùn)行時的開銷而換來更好的可維護(hù)性和代碼重用性,是很值得的一件事。




25、typedef的使用
—————————


typedef是一個給類型起別名的關(guān)鍵字。不要小看了它,它對于你代碼的維護(hù)會有很好的作用。比如C中沒有bool,于是在一個軟件中,一些程序員使用int,一些程序員使用short,會比較混亂,最好就是用一個typedef來定義,如:


? ? typedef char bool;
? ??
一般來說,一個C的工程中一定要做一些這方面的工作,因為你會涉及到跨平臺,不同的平臺會有不同的字長,所以利用預(yù)編譯和typedef可以讓你最有效的維護(hù)你的代碼,如下所示:


? ? #ifdef SOLARIS2_5
? ? ? typedef boolean_t ? ? BOOL_T;
? ? #else
? ? ? typedef int ? ? ? ? ? BOOL_T;
? ? #endif
? ??
? ? typedef short ? ? ? ? ? INT16_T;
? ? typedef unsigned short ?UINT16_T;
? ? typedef int ? ? ? ? ? ? INT32_T;
? ? typedef unsigned int ? ?UINT32_T;
? ??
? ? #ifdef WIN32
? ? ? typedef _int64 ? ? ? ?INT64_T;
? ? #else
? ? ? typedef long long ? ? INT64_T;
? ? #endif
? ??
? ? typedef float ? ? ? ? ? FLOAT32_T;
? ? typedef char* ? ? ? ? ? STRING_T;
? ? typedef unsigned char ? BYTE_T;
? ? typedef time_t ? ? ? ? ?TIME_T;?
? ? typedef INT32_T ? ? ? ? PID_T;
? ??
使用typedef的其它規(guī)范是,在結(jié)構(gòu)和函數(shù)指針時,也最好用typedef,這也有利于程序的易讀和可維護(hù)性。如:


? ? typedef struct _hostinfo {?
? ? ? ? HOSTID_T ? host;?
? ? ? ? INT32_T ? ?hostId;?
? ? ? ? STRING_T ? hostType;?
? ? ? ? STRING_T ? hostModel;?
? ? ? ? FLOAT32_T ?cpuFactor;?
? ? ? ? INT32_T ? ?numCPUs;
? ? ? ? INT32_T ? ?nDisks;
? ? ? ? INT32_T ? ?memory;
? ? ? ? INT32_T ? ?swap;
? ? } HostInfo;




? ? typedef INT32_T (*RsrcReqHandler)(
? ? ?void *info,
? ? ?JobArray *jobs,?
? ? ?AllocInfo *allocInfo,
? ? ?AllocList *allocList);


C++中這樣也是很讓人易讀的:


? ? typedef CArray<HostInfo, HostInfo&> HostInfoArray;


于是,當(dāng)我們用其定義變量時,會顯得十分易讀。如:


? ? HostInfo* phinfo;
? ? RsrcReqHandler* pRsrcHand;


這種方式的易讀性,在函數(shù)的參數(shù)中十分明顯。


關(guān)鍵是在程序種使用typedef后,幾乎所有的程序中的類型聲明都顯得那么簡潔和清淅,而且易于維護(hù),這才是typedef的關(guān)鍵。


?


26、為常量聲明宏
————————
最好不要在程序中出現(xiàn)數(shù)字式的“硬編碼”,如:


? ? int user[120];
? ??
為這個120聲明一個宏吧。為所有出現(xiàn)在程序中的這樣的常量都聲明一個宏吧。比如TimeOut的時間,最大的用戶數(shù)量,還有其它,只要是常量就應(yīng)該聲明成宏。如果,突然在程序中出現(xiàn)下面一段代碼,


? ? for ( i=0; i<120; i++){
? ? ? ? ....
? ? }


120是什么?為什么會是120?這種“硬編碼”不僅讓程序很讀,而且也讓程序很不好維護(hù),如果要改變這個數(shù)字,得同時對所有程序中這個120都要做修改,這對修改程序的人來說是一個很大的痛苦。所以還是把常量聲明成宏,這樣,一改百改,而且也很利于程序閱讀。


? ? #define MAX_USR_CNT 120
? ??
? ? for ( i=0; i<MAX_USER_CNT; i++){
? ? ? ? ....
? ? }


這樣就很容易了解這段程序的意圖了。


有的程序員喜歡為這種變量聲明全局變量,其實,全局變量應(yīng)該盡量的少用,全局變量不利于封裝,也不利于維護(hù),而且對程序執(zhí)行空間有一定的開銷,一不小心就造成系統(tǒng)換頁,造成程序執(zhí)行速度效率等問題。所以聲明成宏,即可以免去全局變量的開銷,也會有速度上的優(yōu)勢。




27、不要為宏定義加分號
———————————


有許多程序員不知道在宏定義時是否要加分號,有時,他們以為宏是一條語句,應(yīng)該要加分號,這就錯了。當(dāng)你知道了宏的原理,你會贊同我為會么不要為宏定義加分號的。看一個例子:


? ? #define MAXNUM 1024;


這是一個有分號的宏,如果我們這樣使用:


? ? half = MAXNUM/2;
? ??
? ? if ( num < MAXNUM )


等等,都會造成程序的編譯錯誤,因為,當(dāng)宏展開后,他會是這個樣子的:


? ? half = 1024;/2;
? ??
? ? if ( num < 1024; )
? ??
是的,分號也被展進(jìn)去了,所以造成了程序的錯誤。請相信我,有時候,一個分號會讓你的程序出現(xiàn)成百個錯誤。所以還是不要為宏加最后一個分號,哪怕是這樣:


? ? #define LINE ? ?"================================="
? ??
? ? #define PRINT_LINE ?printf(LINE)


? ? #define PRINT_NLINE(n) ?while ( n-- >0 ) { PRINT_LINE; }
? ??
都不要在最后加上分號,當(dāng)我們在程序中使用時,為之加上分號,


? ? main()
? ? {
? ? ? ? char *p = LINE;
? ? ? ? PRINT_LINE;
? ? }


這一點非常符合習(xí)慣,而且,如果忘加了分號,編譯器給出的錯誤提示,也會讓我們很容易看懂的。


本文轉(zhuǎn)自:http://blog.csdn.net/haoel/article/details/2877

總結(jié)

以上是生活随笔為你收集整理的编程修养(六)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。