Оператор typeof в C

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

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

5 ответов

Решение

Поскольку 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 является container_of,

Это расширение C от компилятора GCC, см. http://gcc.gnu.org/onlinedocs/gcc/Typeof.html

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

Один из случаев, когда вам нужно будет использовать это расширение, - это получить указатель на анонимные структуры. Вы можете проверить этот вопрос на примере.

Другие вопросы по тегам