Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why is sizeof considered an operator?

Why is sizeof considered an operator and not a function?

What property is necessary to qualify as an operator?

like image 938
Arpit Avatar asked Sep 08 '09 11:09

Arpit


People also ask

Why is sizeof an operator?

Because it is a compile-time operator that, in order to calculate the size of an object, requires type information that is only available at compile-time. This doesn't hold for C++. Show activity on this post. sizeof() operator is a compile time would be occurrence.

How sizeof is an operator?

The sizeof operator applied to a type name yields the amount of memory that can be used by an object of that type, including any internal or trailing padding. The result is the total number of bytes in the array. For example, in an array with 10 elements, the size is equal to 10 times the size of a single element.

Is size of () a function or operator?

In C language, sizeof( ) is an operator. Though it looks like a function, it is an unary operator. For example in the following program, when we pass a++ to sizeof, the expression “a++” is not evaluated.

Is sizeof a valid operator in C?

sizeof operator:sizeof is much used in the C/C++ programming language. It is a compile-time unary operator which can be used to compute the size of its operand.


3 Answers

Because the C standard says so, and it gets the only vote.

As consequences:

  • The operand of sizeof can be a parenthesised type, sizeof (int), instead of an object expression.
  • The parentheses are unnecessary: int a; printf("%d\n", sizeof a); is perfectly fine. They're often seen, firstly because they're needed as part of a type cast expression, and secondly because sizeof has very high precedence, so sizeof a + b isn't the same as sizeof (a+b). But they aren't part of the invocation of sizeof, they're part of the operand.
  • You can't take the address of sizeof.
  • The expression which is the operand of sizeof is not evaluated at runtime (sizeof a++ does not modify a).
  • The expression which is the operand of sizeof can have any type except void, or function types. Indeed, that's kind of the point of sizeof.

A function would differ on all those points. There are probably other differences between a function and a unary operator, but I think that's enough to show why sizeof could not be a function even if there was a reason to want it to be.

like image 128
Steve Jessop Avatar answered Oct 27 '22 02:10

Steve Jessop


It can be used as a compile-time constant, which is only possible if it's an operator rather than a function. For instance:

union foo {
    int i;
    char c[sizeof(int)];
};

Syntactically if it weren't an operator then it would have to be a preprocessor macro since functions can't take types as arguments. That would be a difficult macro to implement since sizeof can take both types and variables as an argument.

like image 25
John Kugelman Avatar answered Oct 27 '22 02:10

John Kugelman


Because the C standard says so, and it gets the only vote.

And the standard is probably correct because sizeof takes a type and

In general, if either the domain or codomain (or both) of a function contains elements significantly more complex than real numbers, that function is referred to as an operator. Conversely, if neither the domain nor the codomain of a function contain elements more complicated than real numbers, that function is likely to be referred to simply as a function. Trigonometric functions such as cosine are examples of the latter case.

Additionally, when functions are used so often that they have evolved faster or easier notations than the generic F(x,y,z,...) form, the resulting special forms are also called operators. Examples include infix operators such as addition "+" and division "/", and postfix operators such as factorial "!". This usage is unrelated to the complexity of the entities involved.

(Wikipedia)

like image 6
Daniel Brückner Avatar answered Oct 27 '22 02:10

Daniel Brückner