2012-05-20 34 views
6

Una matriz de caracteres se define globalmente y una estructura con el mismo nombre se define dentro de una función. ¿Por qué el operador sizeof devuelve diferentes valores para c & C++?operador sizeof devuelve diferentes valores para c & C++?

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

// devuelve 4 en C++ y C 13 en

+0

@OliCharlesworth: compila bien en mi compilador – Ashwyn

+0

@Ashwyn - el compilador compila sin el '; '' S' después de struct' s declaración? – birryree

+0

@OliCharlesworth: oops lo siento! olvidé escribir eso, de hecho escribí ese código, ¡en lugar de copiar pegando! – Ashwyn

Respuesta

15

Debido a que en C++, el struct se ha definido llamado S, mientras que en C, es llamado struct S (razón por la cual a menudo se ve typedef struct utilizado en el código C). Resultados Si se va a cambiar el código a la siguiente, se llega a la esperada:

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

Es una mala idea usar nombres que comiencen con un guión bajo seguido de una letra mayúscula, porque esos nombres están [reservados] (http://stackoverflow.com/questions/228783/) para la implementación. – fredoverflow

+0

Bastante justo. Modificado ligeramente (no es que importe mucho por el ejemplo). –

10

En C, para referirse al tipo de estructura, es necesario decir struct S. Por lo tanto, sizeof(S) se refiere a la matriz.

En C++, struct es innecesario. Entonces, el S local oculta el S global.