A character array is defined globally and a structure with same name is defined within a function. Why sizeof operator returns different values for c & c++ ?
char S[13];
void fun()
{
struct S
{
int v;
};
int v1 = sizeof(S);
}
// returns 4 in C++ and 13 in C
Because in C++, the struct
you defined is named S
, while in C, it's named struct S
(which is why you often see typedef struct
used in C code). If you were to change the code to the following, you would get the expected results:
char S[13];
void fun()
{
typedef struct tagS
{
int v;
} S;
int v1 = sizeof(S);
}
In C, to refer to the struct type, you need to say struct S
. Therefore, sizeof(S)
refers to the array.
In C++, struct
is unnecessary. So the local S
hides the global S
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With