简体   繁体   中英

sizeof operator returns different values for c & c++?

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 .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM