Оператор 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
Это не совсем оператор, а ключевое слово. И нет, это не делает никакой магии во время выполнения.
Один из случаев, когда вам нужно будет использовать это расширение, - это получить указатель на анонимные структуры. Вы можете проверить этот вопрос на примере.