是C中的typeof,真的是运算符吗?
我在想,因为在C中没有多态性,在运行时没有任何事情要做。也就是说,typeof的答案在编译时已知。 (我想不出在编译时就不知道的typeof的用法)。所以它似乎更像是编译时指令,而不是运算符。C中的typeof运算符
是否使用typeof(处理器)运行时(在GCC中)?
是C中的typeof,真的是运算符吗?
我在想,因为在C中没有多态性,在运行时没有任何事情要做。也就是说,typeof的答案在编译时已知。 (我想不出在编译时就不知道的typeof的用法)。所以它似乎更像是编译时指令,而不是运算符。C中的typeof运算符
是否使用typeof(处理器)运行时(在GCC中)?
由于typeof
是一个编译器扩展,它并没有真正的定义,但是在C的传统中它将是一个运算符,例如sizeof
和_Alignof
也被看作是一个运算符。
而你错了,C有动态类型,只在运行时确定:变量修改(VM)类型。
size_t n = strtoull(argv[1], 0, 0);
double A[n][n];
typeof(A) B;
只能在运行时确定。
不要害怕链接到[有趣的来源](http://gustedt.wordpress.com/2011/01/09/dont-be-afraid-of-variably-modified-types/)关于这个话题:) –
@NikolaiRuhe,不会认为这是虚拟机类型的主要资源......但如果你这么说:) –
只是[问谷歌](http://www.google.com/search?q=VM + VLA + C) –
距离GCC编译C扩展,见http://gcc.gnu.org/onlinedocs/gcc/Typeof.html
这不完全的运营商,而不是关键字。不,它不会执行任何运行时魔法。
downvotes的原因? – 2012-08-23 21:04:32
这是一个GNU扩展。简而言之,这是一种方便的方式来声明与另一个类型相同的对象。例如:
int x; /* Plain old int variable. */
typeof(x) y; /* Same type as x. Plain old int variable. */
它的工作原理完全在编译时
和它的主要的宏使用。宏观依靠typeof
的一个着名的例子是container_of
。
不要认为它完全可以在编译时使用,尽管我不得不承认我没有检查:我认为它也适用于VLA和其他VM类型。所以这只能在运行时间确定。 –
@JensGustedt你说得对。 – cnicutar
C没有'typeof'运算符,这是一个编译器扩展。 –