Ste*_*sop 174
因为C标准是这样说的,它得到了唯一的投票.
结果如下:
sizeof (int),而不是对象表达式.int a; printf("%d\n", sizeof a);完全没问题.他们经常被看到,首先是因为他们需要作为类型转换表达式的一部分,其次因为sizeof具有非常高的优先级,所以sizeof a + b不一样sizeof (a+b).但它们不是sizeof的调用的一部分,它们是操作数的一部分.sizeof a++不修改a).所有这些点的功能都不同.函数和一元运算符之间可能存在其他差异,但我认为这足以说明为什么sizeof不能成为函数,即使有理由想要它也是如此.
Joh*_*ica 22
它可以用作编译时常量,只有当它是运算符而不是函数时才可以使用.例如:
union foo {
int i;
char c[sizeof(int)];
};
Run Code Online (Sandbox Code Playgroud)
从语法上讲,如果它不是一个运算符,那么它必须是一个预处理器宏,因为函数不能将类型作为参数.这将是一个难以实现的宏,因为sizeof可以将类型和变量作为参数.
因为它不是一个函数。你可以这样使用它:
int a;
printf("%d\n", sizeof a);
Run Code Online (Sandbox Code Playgroud)
函数确实有入口点、代码等。函数在运行时运行(或内联),sizeof 必须在编译时确定。