Cのtypeofは本当に演算子ですか?
Cにはポリモーフィズムがないため、実行時に何もする必要がないと考えています。つまり、typeof の答えはコンパイル時にわかります。(コンパイル時に認識されない typeof の使用は考えられません。)したがって、演算子というよりも、コンパイル時のディレクティブのように見えます。
typeof は (プロセッサ) ランタイムを (GCC で) 使用しますか?
はコンパイラの拡張であるためtypeof
、実際にはその定義はありませんが、C の伝統では、演算子と見なされます。たとえば、演算子sizeof
と_Alignof
も見なされます。
C には、実行時にのみ決定される動的な型、つまり変数変更 (VM) 型があります。
size_t n = strtoull(argv[1], 0, 0);
double A[n][n];
typeof(A) B;
実行時にのみ決定できます。
typeof
2021 年に追加:と同様のルールでsizeof
C23 に入る可能性は十分にあります。
これは GNU 拡張機能です。簡単に言えば、同じ型を持つオブジェクトを別のオブジェクトと宣言する便利な方法です。例えば:
int x; /* Plain old int variable. */
typeof(x) y; /* Same type as x. Plain old int variable. */
コンパイル時に完全に機能し、主にマクロで使用されます。に依存するマクロの有名な例の 1 つtypeof
がcontainer_of
.
これは GCC コンパイラの C 拡張です。http://gcc.gnu.org/onlinedocs/gcc/Typeof.html を参照してください。
これは正確には演算子ではなく、キーワードです。いいえ、ランタイム マジックは実行しません。