typeof operator in C
CGccTypeofC Problem Overview
Is typeof in C, really an operator?
I'm thinking because there is no polymorphism in C, that there is nothing to do at run-time. That is, the answer to typeof is known at compile-time. (I can't think of a use of typeof that would not be known at compile time.) So it appears to be more of a compile-time directive, than an operator.
Does typeof use any (processor) run-time (in GCC)?
C Solutions
Solution 1 - C
Since typeof
is a compiler extension, there is not really a definition for it, but in the tradition of C it would be an operator, e.g sizeof
and _Alignof
are also seen as an operators.
And you are mistaken, C has dynamic types that are only determined at run time: variable modified (VM) types.
size_t n = strtoull(argv[1], 0, 0);
double A[n][n];
typeof(A) B;
can only be determined at run time.
Add on in 2021: there are good chances that typeof
with similar rules as for sizeof
will make it into C23.
Solution 2 - C
It's a GNU extension. In a nutshell it's a convenient way to declare an object having the same type as another. For example:
int x; /* Plain old int variable. */
typeof(x) y; /* Same type as x. Plain old int variable. */
It works entirely at compile-time and it's primarily used in macros. One famous example of macro relying on typeof
is container_of
.
Solution 3 - C
It is a C extension from the GCC compiler , see http://gcc.gnu.org/onlinedocs/gcc/Typeof.html
Solution 4 - C
It's not exactly an operator, rather a keyword. And no, it doesn't do any runtime-magic.
Solution 5 - C
One case in which you will need to use this extension is to get the pointer of an anonymous structs. You can check this this question for an example.