📌 置頂: 請把任何比你弱勢的用路人當作你的至親對待。跟前車保持安全車距 (2秒以上)。

TIL: ARRAY_SIZE in Linux kernel

In

,

Tags:



by

from net/mac80211/sta_info.c, define at include/linux/kernel.h

__must_be_array: 檢查 a 是否為 array,當 a 為 array 時,會因為 &(a)[0] 變成 pointer,而讓 __same_type 產生 0 的結果,反之如果 a 為 pointer,因為 &(a)[0] 仍然是 pointer, __same_type 回傳 1 而導致 BUILD_BUG_ON_ZERO 產生編譯 error,從而檢查傳入的 object 是否為 array:

BUILD_BUG_ON_ZERO: 當 BUILD_BUG_ON_ZERO 的值為 true 的時候,編譯時會發出 error (error: negative width in bit-field ‘’)。但值為 false 時會產生 value 0:

__same_type: 根據不同的編譯器有不同的版本,這邊以 gcc 為例,使用的 gcc 的 builtin-function __builtin_types_compatible_p , 當兩者 type 相同時回傳 1,否則回傳 0:

 

範例程式碼:

編譯結果:

 


Comments

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.