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