文字配列はグローバルに定義され、同じ名前の構造体が関数内で定義されます。sizeof演算子がcとc++に異なる値を返すのはなぜですか?
char S[13];
void fun()
{
struct S
{
int v;
};
int v1 = sizeof(S);
}
// C ++で4、Cで13を返します
C ++では、struct
定義した名前S
は、Cでは名前が付けられているためです(これが、Cコードでstruct S
よく使用される理由です)。typedef struct
コードを次のように変更すると、期待どおりの結果が得られます。
char S[13];
void fun()
{
typedef struct tagS
{
int v;
} S;
int v1 = sizeof(S);
}
Cでは、構造体タイプを参照するには、と言う必要がありますstruct S
。したがって、sizeof(S)
は配列を参照します。
C ++では、struct
不要です。したがって、ローカルS
はグローバルを非表示にしS
ます。