C中的typeof运算符

Dou*_*oug 44 c gcc typeof

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

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

Jen*_*edt 55

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

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

size_t n = strtoull(argv[1], 0, 0);
double A[n][n];
typeof(A) B;
Run Code Online (Sandbox Code Playgroud)

只能在运行时确定.

  • 不要害怕链接到[有趣的来源](http://gustedt.wordpress.com/2011/01/09/dont-be-afraid-of-variable-modified-types/)关于这个主题:) (13认同)
  • 哎呦!同样适用于'sizeof()':我认为结果是在编译时修复的,但现在我发现它不是. (3认同)

cni*_*tar 28

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

int x;         /* Plain old int variable. */
typeof(x) y;   /* Same type as x. Plain old int variable. */
Run Code Online (Sandbox Code Playgroud)

它完全在编译时工作,主要用于宏.一个着名的宏观依赖的例子typeofcontainer_of.

  • 不要认为它完全适用于编译,但我不得不承认我没有检查:我认为它也适用于VLA和其他VM类型.所以这只能在运行时确定. (4认同)

And*_*ani 8

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


小智 5

它不完全是一个运算符,而是一个关键字。不,它不会对运行时产生任何影响。