In particular I'd like to know what ->val
does in the
sizeof(((stoken_t*)(0))->val)
and what stoken_t*(0)
pointer do, in particular what the (0)
means?
I hope I have formulated my question clearly enough.
Line of code is a unit used in measuring or estimating the scale of programming or code conversion efforts.
In size-oriented metrics, LOC is considered to be the normalization value. It is an older method that was developed when FORTRAN and COBOL programming were very popular. Productivity is defined as KLOC / EFFORT, where effort is measured in person-months. Size-oriented metrics depend on the programming language used.
By comparison, the Microsoft Windows operating system has roughly 50 million lines of code.
This is a way of accessing a member of a structure at compile time, without needing to have a variable defined of that structure type.
The cast (stoken_t*)
to a value of 0
emulates a pointer of that structure type, allowing you to make use of the ->
operator on that, just like you would use it on a pointer variable of that type.
To add, as sizeof
is a compile time operator, the expression is not evaluated at run-time, so unlike other cases, here there is no null-pointer dereference happening.
It is analogous to something like
stoken_t * ptr;
sizeof(ptr->val);
In detail:
(stoken_t*)(0)
simply casts 0
(this could be an arbitrary numeric literal) to a pointer to stoken_t
, ((stoken_t*)(0)->val)
is then the type of the val
member of stoken_t
and sizeof
returns the number of bytes this type occupies in memory. In short, this expression finds the size of a struct member at compile time without the need for an instance of that struct type.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With