宏ARRAY_SIZE,是求设备结构体中设备的个数, 定义在linux/kernel.h中 #define ARRAY_SIZE(arr) (sizeof(arr)/sizeof((arr)[0]) + __must_be_array(arr)) sizeof(arr)/sizeof((arr)[0])是求出设备的个数,__must_be_array(arr)是防止被吴用,比如用指针而不是数组上。
核心代码是IS_ARRAY(array) + (sizeof(array) / sizeof((array)[0]))。 IS_ARRAY(array)用于进行类型检查,若不是数组则产生编译错误,若是数组返回结果为 0,对最终计算结果无影响。 sizeof(array) / sizeof((array)[0])用于获取实际的数组大小。由于array是一个数组,那么sizeof(array)的结果是整个数组所...
在看一下宏#define MYARRAYSIZE(A) sizeof(array_size_fake_func(A)),其中sizeof(array_size_fake_func(A)),sizeof是编译期行为,所以这里函数并不产生调用,只是产生函数返回值类型,这个函数甚至不需要调用就能推导出N,所以这个宏没有额外的运行期损耗,所以这就是它的优势,没有类型不明确造成...
#define ARRAY_SIZE(arr) (sizeof(arr)/sizeof((arr)[0]) + __must_be_array(arr)) 写驱动时,看到这个宏,是求设备结构体中设备的个数。 __must_be_array(arr))作用:宏定义防止被误用,比如用在指针而不是数组上。
ARRAY_SIZE宏 求设备结构体中设备的个数 定义在linux/kernel.h中 #define ARRAY_SIZE(arr) (sizeof(arr)/sizeof((arr)[0]) + __must_be_array(arr)) 1. __must_be_array(arr)是防止被误用,比如用指针而不是数组
ARRAY_SIZE宏 求设备结构体中设备的个数 定义在linux/kernel.h中 #defineARRAY_SIZE(arr) (sizeof(arr)/sizeof((arr)[0]) + __must_be_array(arr)) __must_be_array(arr)是防止被误用,比如用指针而不是数组