C 中的 typeof 运算符

问题描述 投票:0回答:5

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

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

c gcc typeof
5个回答
102
投票

由于

typeof
是一个编译器扩展,因此并没有真正的定义,但在 C 的传统中,它是一个运算符,例如
sizeof
_Alignof
也被视为运算符。

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

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

只能在运行时确定。

2024 年添加:

typeof
sizeof
类似的规则已纳入 C23。


41
投票

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

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

它完全在编译时工作并且主要用于宏。宏依赖于

typeof
的一个著名例子是
container_of


14
投票

它是 GCC 编译器的 C 扩展,请参阅 this


5
投票

它不完全是一个运算符,而是一个关键字。 不,它不会执行任何运行时魔法。


2
投票

您需要使用此扩展的一种情况是获取匿名结构的指针。您可以查看这个这个问题作为示例。

© www.soinside.com 2019 - 2024. All rights reserved.