Variabel modifiziertes Array im Dateibereich
Will ich schaffen, eine Konstante statische Arrays verwendet, während meine Objective-C implementation file ähnelt etwas wie dieses auf der obersten Ebene von meine ".m" Datei:
static const int NUM_TYPES = 4;
static int types[NUM_TYPES] = {
1,
2,
3,
4 };
Ich Plane mit NUM_TYPES
später in der Datei, so wollte ich es in eine variable.
Jedoch, wenn ich dies mache, bekomme ich die Fehlermeldung
"Variabel geändert 'Typen' im Datei-Bereich"
Entnehme ich, dass das vielleicht etwas zu tun mit der array-Größe wird eine variable (die ich nicht bekomme diese Meldung, wenn ich eine integer-literal gibt, wie static int types[4]
).
Möchte ich dieses Problem zu lösen, aber vielleicht werde ich etwa alles falsch...ich habe einen 2-Tore-hier:
- Haben ein array, die zugänglich ist in der gesamten Datei
- Zu Kapseln
NUM_TYPES
in eine variable, damit ich nicht das gleiche literal verstreut über verschiedene Orte in meiner Datei
Irgendwelche Vorschläge?
[BEARBEITEN]
Dies fand in der C-Faq: http://c-faq.com/ansi/constasconst.html
InformationsquelleAutor der Frage Sam | 2009-11-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Grund für diese Warnung ist, dass const in c bedeutet nicht konstant. Es bedeutet "nur Lesen". So wird der Wert, gespeichert in einem Speicher-Adresse und kann möglicherweise geändert werden, indem Sie Computer-code.
InformationsquelleAutor der Antwort larsr
Wenn du gehst, um die Verwendung der Präprozessor sowieso, wie pro die anderen Antworten, dann machen Sie den compiler bestimmen, den Wert von
NUM_TYPES
automatisch:InformationsquelleAutor der Antwort caf
InformationsquelleAutor der Antwort Jim Buck
Ist es auch möglich, die Aufzählung.
InformationsquelleAutor der Antwort Dave L Delaney
Imho ist dies ein Fehler in vielen c-Compilern. Ich weiß, für eine Tatsache, dass der Compiler arbeitete ich mit " nicht speichern "static const" - variable an eine Adresse, sondern ersetzen die Verwendung im code durch die sehr Konstante. Dies kann überprüft werden, wie Sie bekommen die gleiche Prüfsumme für den erzeugten code, wenn Sie verwenden ein Präprozessoren #define-Direktive und wenn Sie eine statische const-variable.
Jede Weise, die Sie verwenden sollten, statische const-Variablen anstelle von #definiert, wenn möglich als static const Typ ist sicher.
InformationsquelleAutor der Antwort hans lepoeter
Da ist es bereits erklärt, in anderen Antworten
const
in C bedeutet lediglich, dass eine variable ist read-only. Es ist noch immer ein run-time-Wert. Sie können jedoch mit einerenum
als eine echte Konstante in C:InformationsquelleAutor der Antwort CygnusX1