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
.