1.可以對一些常量、字串進行巨集定義,在預處理過程中進行替換,而不是在編譯過程中。
#define pi 3.1415926
2.也可以對資料型別進行巨集定義,這樣與
typedef
效果相同
typedef為
c語言的關鍵字,作用是為一種資料型別定義乙個新的名字。
typedef unsigned char uchar; (typedef需要在後邊加乙個;)
3.帶引數的巨集
#define add(a,b) ((a)+(b))
盡量在使用的時候全部加上括號,如果不加括號將會存在安全隱患。
例如出現這種情況
#define add(a,b) (a)+(b)
add(2,3)*add(4,5)
進行替換之後就會出現這樣的情況 2+3*4+5
這肯定不是我們想要的結果。
#define mul(a,b) (a*b)
mul(5+3,4+6) 替換之後
5+3*4+6
這也不是我們想要的結果
所以在使用帶引數的巨集的時候,加括號是必須的。
4.define的多行定義
define可以替代多行的**,例如mfc中的巨集定義
#define macro(arg1, arg2) do while(0) /* (no trailing ; ) */
關鍵是要在每乙個換行的時候加上乙個"/"
5.在大規模的開發過程中,特別是跨平台和系統的軟體裡,
define
最重要的功能是條件編譯。
就是:#ifdef windows
......
......
#endif
#ifdef linux
......
......
#endif
可以在編譯的時候通過#define
設定編譯環境。 6.
防止乙個標頭檔案被重複包含
由於標頭檔案包含可以巢狀,那麼c
檔案就有可能多次包含同乙個標頭檔案,就可能出現重複定義的問題的。
通過條件編譯開關來避免重複包含(重複定義)
#ifndef
__func_h__
#define
__func_h__
//標頭檔案內容
#endif
由於標頭檔案包含可以巢狀,那麼c
檔案就有可能多次包含同乙個標頭檔案,就可能出現重複定義的問題的。通過條件編譯開關來避免重複包含(重複定義)。因為當它編譯第乙個標頭檔案時總是沒有定義
#define
__func_h__
,那麼它將編譯一遍標頭檔案中所有的內容,包括定義#define
__func_h__
。這樣編譯再往下進行時如果遇到同樣要編譯的標頭檔案,那麼由於語句#ifndef
__func_h__
的存在它將不再重複的編譯這個標頭檔案。
DateTime的一些使用方法
1 datetime 數字型 system.datetime currenttime new system.datetime 1.1 取當前年月日時分秒 currenttime system.datetime.now 1.2 取當前年 int 年 currenttime.year 1.3 取當前月 ...
NSString的一些使用方法
else 6.拼接字串 nslog string1 7.替換字串 1.直接替換字串 string3 stringbyreplacingoccurrencesofstring 男 withstring ff nslog string1 2.給定範圍替換 nsrange range string6 st...
sed的一些使用方法
用sed如何輸出指定範圍的行,輸出的是1 5行 sed n 1,5p filename 如果要求輸出的是1,9,11,33行 sed n 1p 9p 11p 33p urfile 替換 sed i s xmx4096m xmx2048m g mapred site.xml 注釋 把全文的 xmx40...