c - What does sizeof(int[1]) mean? -
i new linux kernel. reading file ioctl.h, there encountered macro _ioc_typecheck(t), looks this:
#define _ioc_typecheck(t) \ ((sizeof(t) == sizeof(t[1]) && \ sizeof(t) < (1 << _ioc_sizebits)) ? \ sizeof(t) : __invalid_size_argument_for_ioc) can explain me code? in code, sizeof(t[1]) mean?
this used check validity of third parameter _ior/_iow/_iowr macros, supposed type. checks parameter type (and not variable or number), , causes compiler or linker error otherwise.
if
ttype,t[1]type "an array of 1t". type has same sizet, , thereforesizeof(t) == sizeof(t[1])true.if
tnumber,sizeof(t)fail compile.if
tsimple (non-array) variable,t[1]cause compiler error.if
tarray variable,sizeof(t) == sizeof(t[1])false, , linker error caused (because__invalid_size_argument_for_iocnot defined).
the expression sizeof(t) < (1 << _ioc_sizebits) checks size of type t not exceed maximum allowed ioctl, , causes same linker error otherwise.
there still invalid cases not caught macro - example, when t pointer pointer.
Comments
Post a Comment