Behavior of sizeof on variable length arrays (C only)

It still behaves as an operator. Cast is also operator and also evaluates it’s argument and so does * or & . Being an operator is a syntactic category. That does not change.

The important distinction is that it behaves as expression while in other cases it behaves as constant.


Update: I commented below that I don’t see why the evaluation makes difference, but now I realized there are two ways you can write sizeof with variable length array. Either you can pass variable declared as variable lenght array:

int a[x];
sizeof(a)

in which case evaluating a indeed makes no difference. But you can also use a type as the argument, which would be

sizeof(int[x])

and in this case the result is x * sizeof(int) and x must be evaluated. Which I suppose is why the specification mentions it.

Leave a Comment