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)?

3

5 Answers

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.

7

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.

1

It is a C extension from the GCC compiler , see

It's not exactly an operator, rather a keyword. And no, it doesn't do any runtime-magic.

1

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.

2

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy