C中的typeof运算符

时间:2012-08-22 21:12:54

标签: c gcc typeof

C中的typeof,真的是运营商吗? 我在想,因为C中没有多态,在运行时没有什么可做的。也就是说,typeof的答案在编译时是已知的。 (我无法想到在编译时不会知道的typeof的使用。)所以它似乎更像是一个编译时指令,而不是一个运算符。

typeof是否使用任何(处理器)运行时(在GCC中)?

4 个答案:

答案 0 :(得分:49)

由于typeof是编译器扩展,因此没有真正的定义,但在C的传统中它将是一个运算符,例如sizeof_Alignof也被看到作为运营商。

你错了,C有动态类型,只在运行时确定:变量修改(VM)类型。

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

只能在运行时确定。

答案 1 :(得分:27)

这是一个GNU扩展。简而言之,它是一种方便的方式来声明一个与另一个类型相同的对象。例如:

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

它完全在编译时工作,它主要用于宏。一个着名的宏依赖typeof的例子是container_of

答案 2 :(得分:7)

它是GCC编译器的C扩展,请参阅http://gcc.gnu.org/onlinedocs/gcc/Typeof.html

答案 3 :(得分:4)

它不是一个运算符,而是一个关键字。 不,它没有做任何运行时魔术。