typeof
、 __typeof__
(C23)
C23 標準の新機能である typeof
演算子は、式の型を返す単項演算子です。 型宣言、型キャスト、型チェックなどで使用できます。 変数、関数、または任意の C 式の型を取得します。
__typeof__
キーワードは、typeof
と同じ機能を提供する Microsoft 固有の拡張機能です。 __typeof__
キーワードは、(/std:clatest
だけでなく) すべてのバージョンの C でコンパイルするときに使用できるtypeof
とは異なり、__typeof__
をサポートする他のコンパイラ間でのコードの移植が容易になる場合があります。
typeof
の構文
typeof(type)
typeof(constant-expression)
__typeof__(constant-expression)
typeof
の例
この例では typeof()
を使用していますが、 __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;
}
要件
Visual Studio 17.9 以降、または cl.exe
バージョン 19.39.33428 以降が必要です。
typeof
を使用するには、/std:clatest
でコンパイルします。