65

Cのtypeofは本当に演算子ですか?
Cにはポリモーフィズムがないため、実行時に何もする必要がないと考えています。つまり、typeof の答えはコンパイル時にわかります。(コンパイル時に認識されない typeof の使用は考えられません。)したがって、演算子というよりも、コンパイル時のディレクティブのように見えます。

typeof は (プロセッサ) ランタイムを (GCC で) 使用しますか?

4

5 に答える 5

81

はコンパイラの拡張であるためtypeof、実際にはその定義はありませんが、C の伝統では、演算子と見なされます。たとえば、演算子sizeof_Alignofも見なされます。

C には、実行時にのみ決定される動的な型、つまり変数変更 (VM) 型があります。

size_t n = strtoull(argv[1], 0, 0);
double A[n][n];
typeof(A) B;

実行時にのみ決定できます。

typeof2021 年に追加:と同様のルールでsizeofC23 に入る可能性は十分にあります。

于 2012-08-22T22:02:38.043 に答える
34

これは GNU 拡張機能です。簡単に言えば、同じ型を持つオブジェクトを別のオブジェクトと宣言する便利な方法です。例えば:

int x;         /* Plain old int variable. */
typeof(x) y;   /* Same type as x. Plain old int variable. */

コンパイル時に完全に機能し、主にマクロで使用されます。に依存するマクロの有名な例の 1 つtypeofcontainer_of.

于 2012-08-22T21:15:51.863 に答える
9

これは GCC コンパイラの C 拡張です。http://gcc.gnu.org/onlinedocs/gcc/Typeof.html を参照してください。

于 2012-08-22T21:15:23.200 に答える
5

これは正確には演算子ではなく、キーワードです。いいえ、ランタイム マジックは実行しません。

于 2012-08-22T21:15:51.620 に答える