【问题标题】:why sizeof(function_name) is 1 [duplicate]为什么 sizeof(function_name) 为 1 [重复]
【发布时间】:2014-02-21 14:19:45
【问题描述】:

为什么是这样的结果:

sizeof(function_name)?

1?社区中有人说sizeof(main) 是 1,但 sizeof(main()) 是 4。这里 main 返回 int,所以它返回 4。但是如果我们声明为 char main() 而不是 int main() 它会返回仅 1 个。

【问题讨论】:

  • 应该编译吗?
  • @MartinJames 嗯,gcc 允许 main 返回 char 但给出警告 clang 给出错误。我想我宁愿它是一个错误。

标签: c sizeof


【解决方案1】:

在函数上使用sizeof 是非法的。

C99 §6.5.3.4 sizeof 运算符

sizeof 运算符不得应用于具有函数类型或 不完整的类型,这种类型的括号名称,或表达式 指定位域成员。

所以如果foo是函数名,sizeof(foo)是非法的,但是sizeof(foo())foo()的返回值上应用sizeofmain() 在标准 C 中返回 int,在当今大多数机器上是 4 个字节。

【讨论】:

    【解决方案2】:

    sizeof(char) 等于 1,无论何时何地。

    所以所有声明 char 的东西也可以,而且这已经在编译时了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-07
      • 1970-01-01
      • 2018-03-05
      • 1970-01-01
      • 2011-03-09
      • 1970-01-01
      相关资源
      最近更新 更多