【发布时间】:2011-04-26 16:08:32
【问题描述】:
为什么sizeof 应该是 C 中的运算符,而不是函数?
它的用法似乎类似于函数调用,如sizeof(int)。
它应该是某种伪函数吗?
【问题讨论】:
-
可能是因为
sizeof foo++看起来不像函数调用,不会评估foo++,并且sizeof(int)中的int不是表达式。
为什么sizeof 应该是 C 中的运算符,而不是函数?
它的用法似乎类似于函数调用,如sizeof(int)。
它应该是某种伪函数吗?
【问题讨论】:
sizeof foo++ 看起来不像函数调用,不会评估foo++,并且sizeof(int) 中的int 不是表达式。
函数调用在运行时进行评估。 sizeof 必须在编译时进行评估(尽管我相信 C99 引入了一些例外)
【讨论】:
因为它不是函数;不可能编写一个可以将类型作为参数并返回其大小的函数!另请注意,sizeof 是在编译时实现的,如果您在变量上使用括号,则不需要括号。
【讨论】:
function 是你可以在运行时调用的东西。 sizeof 只有编译器才能理解。
【讨论】:
sizeof 在编译时而不是执行时产生影响。当您输入诸如 sizeof(int) 之类的类型时,您只需要 (),但如果 'i' 是 int 类型,您可以执行 sizeof i
【讨论】:
C 中的函数无法完成 sizeof 需要做的事情。
根据定义,函数在运行时分配空间,并且只能对数据进行操作。
虽然 sizeof 也对特定于编译器的数据类型进行操作。函数不知道如何解释数据类型“int”并根据设计向编译器询问其大小。
在 C99 之前 sizeof 完全是编译时的,但在新标准中,它也可用于在运行时获取信息,用于变长数组。
【讨论】: