使用巨集需要注意的地方

2021-09-06 08:59:38 字數 835 閱讀 6471

ddk提供了大量的巨集。在使用這些巨集的時候,要注意一種錯誤的發生,

這就是"側效"(side effect)

巨集一般由多行組成,如下面的形式,其中的"\"代表換行

#define print(msg) kdprint(("********************\n"));\kdprint(msg);\

kdprint((

"***************====\n

"));

在c語言中規定,for或者if語句塊中的內容如果只是一句,

可以省略掉{}。如:

if

(bret)

//等價於

if(bret)

foo();

但如果foo是巨集而非函式時,就會產生邏輯錯誤,如:

if

(bret)

prinit(msg);

//等價於

if(bret)

kdprint((

"********************\n

"));

kdprint(msg);

kdprint((

"***************====\n

"));

這明顯和我們的想法不一致。產生這樣的錯誤,稱為"側效"錯誤。

解決這個問題,有兩個辦法。

(1)對於if、while、for這樣的語句,不省略{}。這樣是最保險的做法

能完全保證不出現"側效"錯誤

(2)在編寫多行巨集的時候,在巨集的前後加上{}如:

#define print(msg)

使用strncpy需要注意的地方

功能 c c 複製src中的內容 字元,數字 漢字.到dest,複製多少由num的值決定,返回指向dest的指標。如果遇到null字元 0 且還沒有到num個字元時,就用 num n n是遇到null字元前已經有的非null字元個數 個null字元附加到destination。注意 並不是新增到de...

hyperf使用需要注意的地方

jwt datetimeimmutable 報錯 jwt datetimeimmutable 問題 降低版本到3.3.3解決問題 composer require lcobucci jwt 3.3.3 hyperf使用註解的坑,hyperf使用註解會讓註解的例項變為單例,問題1 model產生問題 ...

使用setById時需要注意的地方

在使用listview的時候,通常要對某個item中的乙個控制項進行操作,那麼我們就需要取得這個控制項的引用 這個時候可以使用view.setid int id 來設定乙個id值,然後再通過view.getviewbyid int id 精確得取得該控制項 舉個例子 override public ...