Hacker News new | ask | show | jobs
by masklinn 4037 days ago
Except sizeof is a compile-time operation, not runtime. If sizeof were a function,

    int *foo = malloc(sizeof(*foo));
would make no sense.
3 comments

Compile-time functions are a thing. Not in C, but in other languages, including C++.

This all comes down to what you think "function" means. If you're living in a C bubble, of course sizeof isn't a function. If you have a wider mapping (!) for the word, then it is a kind of function.

If you think everything called a "function", in every context, is the same thing, you are going to have a very bad day.
In C99, sizeof is compile-time only if VLAs are not involved.

In C89, sizeof is always compile-time.

So in practice it works more like a C Macro then a C function?

Edit, except it doesn't treat arguments the same, so no.

It's neither:

sizeof belongs in its own category of unary compile-time(-ish) operators, whose only other member is _Alignof.

If you're so inclined, you might add _Generic and _Pragma to that mix as well, but they aren't really a close fit.