1. 程式人生 > >C語言程式設計小知識二

C語言程式設計小知識二

1.巨集函式的使用:
在這裡只是簡單介紹一下它最常用的用法。在程式設計過程中,巨集定義可以幫助我們防止出錯,提高程式碼的可移植性和可讀性等。在軟體開發過程中,經常有一些常用或者通用的功能或者程式碼段,這些功能既可以寫成函式,也可以封裝成為巨集定義。例如想要進行強制型別轉換
#define TYPECAST(value) (char*)(value)
則以後想要將一個指標強制轉換為char*型別,只需要通過呼叫TYPECAST( )函式就可以了。或者比如經常用到的比較兩個數取其中的最大值

			#define MAX( a, b) ( (a) > (b) (a) : (b) 

2.段錯誤的問題:
對於工作中經常會遇到一些段錯誤的問題,往往是因為對指標的操作不當而引起的,以前上學的時候,對指標的使用頻率並不是很高,傳遞引數的時候,甚至直接寫一個多達七八個引數的函式,更多是出於功能實現性的考慮,但是入職以後,對指標的操作是非常頻繁了,如果連指標的操作都不能理解,更不要說自己是個合格的嵌入式工程師了。迄今自己所遇到的段錯誤,以操作空指標出錯次數最多。比如說

	       struct stu{
	           int a;
	           int b;
	       };
	        struct stu * pointer = NULL;
	        printf("%d",pointer->a);

這種很低階的錯誤,但是由於剛習慣使用指標,有很多東西沒想清楚就開始敲程式碼。我也因為這犯過很多的錯誤。另外還有就是訪問越界,在C語言中,指標可以說是它的特色吧,但是也是非常危險的,很多時候對陣列進行賦值,比如int a[64];結果你去訪問了第65個元素或者對第65個元素進行了任何操作,就有可能引發段錯誤的問題。
3.關於typedef的使用:
在程式設計中,為了方便記憶或者方便閱讀程式碼,同時也方便後期的程式碼維護,比說自己所做的專案中,有上百個引數,這種引數的資料型別都是 char *型別,因此我採用

               typedef char* PAL_ID_TYPE; 

這樣去定義引數的時候,都採用PAL_ID_TYPE來進行定義,後期如果更換了一種機制,不再使用char而採用int來進行引數傳遞,這個時候只需要將char更改為int就可以啦,不用再挨個的更改每個引數值的型別。
4.關於char*型別的賦值:
有時我們在專案中需要訪問字串,比如說現在有一個函式,這個函式需要通過對字串的解析來獲取某些引數,比如說“get.web_bitrate_param”這個字串,用來獲取網頁上的波特率引數,我一開始採用的char bitrate[64];然後通過snprintf來將字串拷貝過來,但是其實是可以直接用等號"="來賦值的,操作的方法就是

               char* bitrate;
               bitrate = "get.web_bitrate_param";

但是有些編譯器會報錯,所以為了不出錯,更好的是在“get.web_bitrate_param”前面加char*來進行強制型別轉換,這樣更為穩妥一些。