前幾天看到乙個巨集, 它大概是這樣的:
#define assert_param(expr) ((expr) ? (void)0 : assert_failed((u8 *)__file__, __line__))
**的含意簡單, 關鍵是那個 (void)0 的用法, 我還是第一次見到
我用 void 的時候, 有兩種情況:
1.放到函式前面, 強調函式沒有返回值, 也就是說函式不能作右值
如: void fun(int x);
2.放到函式形參裡面, 強調函式無任何引數
如: int fun(void);
還有一種用法是:
#define null ((void*)0)
當然, 這就是null空指標的定義方式(在 stdlib.h 裡面).
可, 上面巨集的 (void)0 , 一開始確實讓我覺得有點奇怪, 不知道幹嘛的, 平靜下來, 想了想.
原來, 巨集裡面這樣用的目的是防止該巨集被用作右值, (void)0 本身也不能作右值, 因為 void 非實際的型別!
C語言中的 void 0 與 void 0
前幾天看到乙個巨集,它大概是這樣的 define assert param expr expr void 0 assert failed u8 file line 的含意簡單,關鍵是那個 void 0 的用法,我還是第一次見到 別笑 我用 void 的時候,有兩種情況 1.放到函式前面,強調函式沒有...
函式指標 void 0
在很多情況下,尤其是讀別人所寫 的時候,對 c語言宣告的理解能力變得非常重要,而c語言本身的凝練簡約也使得c語言的宣告常常會令人感到非常困惑,因此,在這裡我用一篇的內容來集中闡述一下這個問題。問題 宣告與函式 有一段程式儲存在起始位址為 0的一段記憶體上,如果我們想要呼叫這段程式,請問該如何去做?答...
原始碼學習之void 0
今天看原始碼的時候看到void 0這樣的寫法,平時在業務 裡基本沒有這樣的寫法,於是學習了一下。在控制台執行了一下void 0,得到返回值是undefined。在mdn上搜了一下void,了解到 以vue的原始碼為例 var createemptyvnode function text 這段 用於建...