【问题标题】:sizeof operator returns different values for c & c++?sizeof 运算符为 c 和 c++ 返回不同的值?
【发布时间】:2012-05-20 02:12:56
【问题描述】:

字符数组是全局定义的,同名结构是在函数中定义的。为什么 sizeof 运算符为 c & c++ 返回不同的值?

char S[13];
void fun()
{
    struct S
    {
        int v;
    };
    int v1 = sizeof(S);
}

// 在 C++ 中返回 4,在 C 中返回 13

【问题讨论】:

  • @OliCharlesworth:在我的编译器上编译得很好
  • @Ashwyn - 你的编译器在struct S 的声明之后编译时没有;
  • @OliCharlesworth:哎呀对不起!忘记写了,其实是我写的代码,而不是复制粘贴!
  • 我认为一般来说最好的答案是“因为 C 和 C++ 是不同的语言。”
  • 您可能还对stackoverflow.com/questions/2038200/… 感兴趣,以了解 C 和 C++ 之间的其他无声差异。

标签: c++ c


【解决方案1】:

因为在 C++ 中,您定义的 struct 被命名为 S,而在 C 中,它被命名为 struct S(这就是为什么您经常在 C 代码中看到 typedef struct 的原因)。如果您将代码更改为以下内容,您将获得预期的结果:

char S[13];
void fun()
{
    typedef struct tagS
    {
        int v;
    } S;
    int v1 = sizeof(S);
}

【讨论】:

  • 使用以下划线后跟大写字母开头的名称是个坏主意,因为这些名称是 reserved 用于实现。
  • 很公平。稍作修改(对于示例而言,这并不重要。)
【解决方案2】:

在 C 中,要引用结构类型,您需要说 struct S。因此,sizeof(S) 指的是数组。

在 C++ 中,struct 是不必要的。所以本地的S隐藏了全局的S

【讨论】:

  • 这就是 C++ 糟糕的原因。
猜你喜欢
  • 2012-05-29
  • 2013-11-08
  • 2018-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-14
相关资源
最近更新 更多