4 回答
TA贡献1802条经验 获得超10个赞
因为C标准是这样说的,所以它是唯一的选择。
结果:
sizeof的操作数可以是带括号的类型
sizeof (int)
,而不是对象表达式。括号是不必要的:
int a; printf("%d\n", sizeof a);
完全可以。人们经常看到它们,首先是因为它们需要作为类型转换表达式的一部分,其次是因为sizeof具有很高的优先级,因此sizeof a + b
与并不相同sizeof (a+b)
。但是它们不是sizeof调用的一部分,而是操作数的一部分。您不能使用sizeof的地址。
作为sizeof操作数的表达式不会在运行时求值(
sizeof a++
不会修改a)。作为sizeof操作数的表达式可以具有除void或函数类型以外的任何类型。确实,这就是sizeof的重点。
在所有这些点上,功能都会有所不同。函数和一元运算符之间可能还存在其他差异,但是我认为这足以说明为什么sizeof不能成为函数,即使有理由要这样做。
TA贡献1853条经验 获得超9个赞
它可以用作编译时常量,仅当它是运算符而不是函数时才可能使用。例如:
union foo {
int i;
char c[sizeof(int)];
};
从语法上讲,如果它不是运算符,则它必须是预处理器宏,因为函数不能将类型作为参数。这将是很难实现的宏,因为sizeof它既可以将类型也可以将变量作为参数。
TA贡献1817条经验 获得超6个赞
因为C标准是这样说的,所以它是唯一的选择。
该标准可能是正确的,因为sizeof采用类型和
通常,如果函数的域或共域(或两者)包含比实数复杂得多的元素,则该函数称为运算符。相反,如果函数的域和共域都不包含比实数更复杂的元素,则该函数可能会简单地称为函数。余弦等三角函数就是后一种情况的示例。
另外,当函数被使用得比通用F(x,y,z,...)形式频繁地使用时,它们的符号表示法发展得更快或更容易时,所得的特殊形式也称为运算符。示例包括中缀运算符(例如加号“ +”和除号“ /”)以及后缀运算符(例如阶乘“!”)。这种用法与所涉及实体的复杂性无关。
TA贡献1875条经验 获得超3个赞
因为它不是功能。您可以这样使用它:
int a;
printf("%d\n", sizeof a);
函数确实具有入口点,代码等。函数要在运行时(或内联)运行,sizeof必须在编译时确定。
- 4 回答
- 0 关注
- 695 浏览
添加回答
举报