2012-05-20 15 views
6

Ein Zeichen-Array wird global definiert und eine Struktur mit demselben Namen wird innerhalb einer Funktion definiert. Warum gibt der Operator "sizeof" verschiedene Werte für c & C++ zurück?sizeof-Operator gibt verschiedene Werte für c & C++ zurück?

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

// returns 4 in C++ und 13 in C

+0

@OliCharlesworth: Kompiliert auf meinem Compiler – Ashwyn

+0

@Ashwyn - Compiler kompiliert ohne ';' 'nach struct S'‘ s Erklärung? – birryree

+0

@OliCharlesworth: oops sorry! vergaß, das zu schreiben, tatsächlich habe ich diesen Code geschrieben, anstatt das Kopieren zu kopieren! – Ashwyn

Antwort

15

Da in C++, die struct Sie definiert S genannt wird, während in C, es struct S genannt (weshalb oft Sie typedef struct in C-Code verwendet sehen). Wenn Sie den Code der folgenden ändern, würden Sie die erwarteten Ergebnisse erhalten:

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

Es ist eine schlechte Idee, Namen zu verwenden, die mit einem Unterstrich beginnen, gefolgt von einem Großbuchstaben, da diese Namen [reserviert] (http://stackoverflow.com/questions/228783/) für die Implementierung sind. – fredoverflow

+0

Fair genug. Leicht modifiziert (nicht, dass es um des Beispiels willen viel ist.) –

10

In C, auf den Strukturtyp zu verweisen, müssen Sie struct S sagen. Daher bezieht sich sizeof(S) auf das Array.

In C++ ist struct nicht erforderlich. So versteckt die lokale S die globale S.

Verwandte Themen