I have a struct that contains an array.
How can I compute the array element count with standard C, when I do not want to resort to defines or const fields?
typedef struct TEXTUREBUCKET {
    long tpage;
    long nVtx;
    D3DTLBUMPVERTEX vtx[2048];
} TEXTUREBUCKET;
static inline size_t TextureBucketVertexCount() {
    return (sizeof(TEXTUREBUCKET) - offsetof(TEXTUREBUCKET, vtx)) / sizeof(D3DTLBUMPVERTEX); // works as long as vtx is the last member
}
You can accomplish this with the following expression:
sizeof(((TEXTUREBUCKET*)0)->vtx) / sizeof(((TEXTUREBUCKET*)0)->vtx[0]
Note that there is no NULL pointer dereference here because the sizeof operator does not actually evaluate its operand (unless it's a variable length array).  The expression is only parsed to determine its type.
This is spelled out in section 6.5.3.4p2 of the C standard regarding the sizeof operator:
The
sizeofoperator yields the size (in bytes) of its operand, which may be an expression or the parenthesized name of a type. The size is determined from the type of the operand. The result is an integer. If the type of the operand is a variable length array type, the operand is evaluated; otherwise, the operand is not evaluated and the result is an integer constant.
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