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;
実行時にのみ決定できます。
これはGNU拡張機能です。一言で言えば、別のオブジェクトと同じ型を持つオブジェクトを宣言するのに便利な方法です。たとえば:
int x; /* Plain old int variable. */
typeof(x) y; /* Same type as x. Plain old int variable. */
コンパイル時に完全に動作します 主にマクロで使用されます。 typeof
に依存するマクロの有名な例の1つはcontainer_of
。
これはGCCコンパイラのC拡張です。 http://gcc.gnu.org/onlinedocs/gcc/Typeof.html を参照してください
正確に演算子ではなく、キーワードです。 いいえ、ランタイムマジックを実行しません。