typeof
, __typeof__
(C23)
New in the C23 standard, the typeof
operator is a unary operator that returns the type of an expression. It can be used in type declarations, type casts, type checks, and so on. It gets the type of a variable, function, or any C expression.
The __typeof__
keyword is a Microsoft-specific extension that provides the same functionality as typeof
. The __typeof__
keyword differs from typeof
only in that it's available when compiling for all versions of C (not just /std:clatest
), and it may ease porting code between other compilers that support __typeof__
.
typeof
syntax
typeof(type)
typeof(constant-expression)
__typeof__(constant-expression)
typeof
example
This example uses typeof()
, but the behavior is the same if you use __typeof__
.
// Compile with /std:clatest
#include <stdio.h>
double func()
{
3.14;
}
#define POINTER(T) typeof(T*)
int main()
{
auto a = func(); // the type for a (double) is inferred, but requires initialization at point of declaration
typeof(func()) b; // the type for b is double, but didn't have to be initialized at point of declaration
// Some declarations using typeof
POINTER(int) p1 = NULL; // p1 is int*
typeof(double(void))* pFunc = func; // pFunc is a pointer to a function that takes no arguments and returns a double
printf("pFunc() returns %f\n", pFunc());
return 0;
}
Requirements
Requires Visual Studio 17.9 or later, or cl.exe
version 19.39.33428 or later.
To use typeof
, compile with /std:clatest
.