C语言中的运算符类型

C语言中的运算符类型,c,gcc,typeof,C,Gcc,Typeof,C中的typeof真的是运算符吗? 我认为,因为C中没有多态性,所以在运行时没有什么可以做的。也就是说,typeof的答案在编译时已知。(我想不出typeof的用法在编译时是未知的。)因此它看起来更像是一个编译时指令,而不是一个运算符 typeof是否使用任何(处理器)运行时(在GCC中)?它是GCC编译器的C扩展,请参阅它不完全是一个运算符,而是一个关键字。不,它没有任何运行时魔法。它是GNU扩展。简而言之,声明一个对象与另一个对象具有相同类型是一种方便的方法。例如: int x;

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


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

它是GCC编译器的C扩展,请参阅它不完全是一个运算符,而是一个关键字。不,它没有任何运行时魔法。

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

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

它完全在编译时工作,主要用于宏。依赖于
typeof
的宏的一个著名例子是
container\u of
,因为
typeof
是一个编译器扩展,它实际上没有定义,但在传统的C语言中它是一个操作符,例如
sizeof
\u
也被视为操作符

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

只能在运行时确定


2021年的附加功能:很有可能
typeof
sizeof
的规则类似,它将进入C23。

C没有
typeof
操作符,这是一个编译器扩展。不要认为它完全在编译时工作,尽管我不得不承认我没有检查:我认为它也适用于VLA和其他VM类型。因此,这只能在运行时确定。不要害怕链接到此主题:)@NikolaiRuhe,不会想到这是VM类型的主要资源。。。但如果你这么说:)@Dubbaloga,谢谢你的建议编辑,我现在自己应用了。哎呀!“sizeof()”也是如此:我原以为结果在编译时是固定的,但现在看来不是。@JensGustedt我想问你,我是否可以像在python等其他语言中调用类型一样,将其称为“动态类型”,因为这只是普通的旧VLA,已知类型为
double
,只是缺少边界大小。无论如何,
VLA的
不被推荐,因为它们生成大量代码,而且速度很慢。Linux把它全部删除了;s(如其他答案所述,在某些情况下,它确实在运行时运行)
size_t n = strtoull(argv[1], 0, 0);
double A[n][n];
typeof(A) B;