【问题标题】:sizeof: Operator or Function? [duplicate]sizeof:运算符还是函数? [复制]
【发布时间】:2011-04-26 16:08:32
【问题描述】:

可能重复:
Why is sizeof an operator?

为什么sizeof 应该是 C 中的运算符,而不是函数

它的用法似乎类似于函数调用,如sizeof(int)

它应该是某种伪函数吗?

【问题讨论】:

  • 可能是因为sizeof foo++ 看起来不像函数调用,不会评估foo++,并且sizeof(int) 中的int 不是表达式。

标签: c sizeof


【解决方案1】:

函数调用在运行时进行评估。 sizeof 必须在编译时进行评估(尽管我相信 C99 引入了一些例外)

【讨论】:

  • 除非你有 VLA...
【解决方案2】:

因为它不是函数;不可能编写一个可以将类型作为参数并返回其大小的函数!另请注意,sizeof 是在编译时实现的,如果您在变量上使用括号,则不需要括号。

【讨论】:

    【解决方案3】:

    function 是你可以在运行时调用的东西。 sizeof 只有编译器才能理解。

    【讨论】:

      【解决方案4】:

      sizeof 在编译时而不是执行时产生影响。当您输入诸如 sizeof(int) 之类的类型时,您只需要 (),但如果 'i' 是 int 类型,您可以执行 sizeof i

      【讨论】:

        【解决方案5】:

        C 中的函数无法完成 sizeof 需要做的事情。

        根据定义,函数在运行时分配空间,并且只能对数据进行操作。

        虽然 sizeof 也对特定于编译器的数据类型进行操作。函数不知道如何解释数据类型“int”并根据设计向编译器询问其大小。

        在 C99 之前 sizeof 完全是编译时的,但在新标准中,它也可用于在运行时获取信息,用于变长数组。

        【讨论】:

          猜你喜欢
          • 2021-04-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-04-08
          • 2015-01-11
          • 1970-01-01
          • 2014-03-04
          • 1970-01-01
          相关资源
          最近更新 更多