Hacker News new | ask | show | jobs
by _lce0 4037 days ago
Well it's an operator, and algebra said all them are just functions... Just like `+` is a function

Anyways not all those writing code have CS background

2 comments

Except algebra said that about algebraic functions and operators.

I know a CS major who insisted in pointing out the same thing. He was extremely surprised when dragons hatched from his eggs instead of the chickens he expected. It was a really heated event. He barely escaped -- and then ranted for several weeks how they were really just eggs and couldn't explain what happened.

Except sizeof is a compile-time operation, not runtime. If sizeof were a function,

    int *foo = malloc(sizeof(*foo));
would make no sense.
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.