6

文字配列はグローバルに定義され、同じ名前の構造体が関数内で定義されます。sizeof演算子がcとc++に異なる値を返すのはなぜですか?

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

// C ++で4、Cで13を返します

4

2 に答える 2

15

C ++では、struct定義した名前Sは、Cでは名前が付けられているためです(これが、Cコードでstruct Sよく使用される理由です)。typedef structコードを次のように変更すると、期待どおりの結果が得られます。

char S[13];
void fun()
{
    typedef struct tagS
    {
        int v;
    } S;
    int v1 = sizeof(S);
}
于 2012-05-20T02:17:29.440 に答える
10

Cでは、構造体タイプを参照するには、と言う必要がありますstruct S。したがって、sizeof(S)は配列を参照します。

C ++では、struct不要です。したがって、ローカルSはグローバルを非表示にしSます。

于 2012-05-20T02:17:19.103 に答える