Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
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.