Подтвердить что ты не робот

Оператор типа в C

Является ли typeof в C, действительно ли оператором?
Я думаю, потому что в C нет полиморфизма, что во время выполнения нечего делать. То есть ответ типа type известен во время компиляции. (Я не могу придумать, как использовать тип, который не был бы известен во время компиляции.) Таким образом, он, по-видимому, скорее является директивой времени компиляции, чем оператором.

Использует ли typeof какое-либо (процессорное) время выполнения (в GCC)?

4b9b3361

Ответ 1

Поскольку typeof является расширением компилятора, на самом деле для него нет никакого определения, но в традициях C это был бы оператор, например, sizeof и _Alignof также рассматриваются как операторы.

И вы ошибаетесь, C имеет динамические типы, которые определяются только во время выполнения: типы с измененной переменной (VM).

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

может быть определен только во время выполнения.

Ответ 2

Это расширение GNU. В двух словах это удобный способ объявить объект, имеющий тот же тип, что и другой. Например:

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

Он полностью работает во время компиляции и в основном используется в макросах. Один известный пример макроса, полагающийся на typeof, равен container_of.

Ответ 4

Это не совсем оператор, скорее ключевое слово. И нет, он не делает никакой магии времени выполнения.