2016-04-26 10 views
4

Ich erhielt diese Frage auf einer meiner Bewertungen für eine Abschlussprüfung. Ich bin ein bisschen ratlos. (Dies in PuTTy in einer Linux-Umgebung kompiliert wird)Angenommen, foo.c enthält die globale Definition int secret = 4;

Frage: Angenommen foo.c enthält die globale Definition int secret = 4; und bar.c enthält die globale Definition char secret[16]; Was passieren wird, wenn foo.c und bar.c sind miteinander verbunden? Wie viel Speicherplatz ist für secret reserviert?

Mein Versuch: Ich denke, dass, da sie beide globale Definitionen des gleichen Namens sind, dass sie beide starke Variablen sind und kompiliert nicht (dh ein Linker-Fehler), da Sie nicht mehrere haben kann starke Variablen .. Wo ich verwirrt bin, ist wie viel Speicher tatsächlich für secret reserviert ist. Vielleicht ist es trivial, wäre es (16 Bytes, da char 1 Byte ist) + 4 Bytes für die ganze Zahl, was insgesamt 20 Bytes ergibt?

Vielen Dank im Voraus

+1

Das scheint eine schlechte Prüfungsfrage für mich zu sein, da dies nichts ist, was irgendjemand jemals tun sollte. Im Grunde haben Sie widersprüchliche globale Definitionen mit dem gleichen Namen. Ich persönlich würde einen Fehler dafür wollen, aber in der Praxis denke ich, dass die initialisierte Definition Vorrang haben wird, was zu einer Größe von 4 führt (unter der Annahme von 4-Byte-Ganzzahlen). –

+0

Ahh. Gibt es Referenzen, an die Sie mir Quellen für Ihre Antwort senden können? Ich denke du hast Recht. –

+2

_'ld: warning: vorläufige Definition von '_secret' mit Größe 16 von '...' wird durch echte Definition der kleineren Größe 4 ersetzt von '...' _ _ – Oka

Antwort

1

Sie sind widersprüchliche Definitionen, damit es nicht verbinden wird so kein Speicher für geheime reserviert ist, oder irgendetwas anderes.

Verwandte Themen