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 Definitionint secret = 4;
undbar.c
enthält die globale Definitionchar secret[16];
Was passieren wird, wennfoo.c
undbar.c
sind miteinander verbunden? Wie viel Speicherplatz ist fürsecret
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
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). –
Ahh. Gibt es Referenzen, an die Sie mir Quellen für Ihre Antwort senden können? Ich denke du hast Recht. –
_'ld: warning: vorläufige Definition von '_secret' mit Größe 16 von '...' wird durch echte Definition der kleineren Größe 4 ersetzt von '...' _ _ – Oka