"static const" vs "#define" vs "enum"
Welches besser zu verwenden, die unter den nachstehenden Anweisungen in C?
static const int var = 5;
oder
#define var 5
oder
enum { var = 5 };
Interessanterweise ist das fast genau die gleiche Frage wie stackoverflow.com/questions/1637332/static-const-vs-define. Der einzige Unterschied ist, dass diese Frage über C++, und dieser ist über C. Da meine Antwort war: C++ - spezifische, sage ich, dass Sie nicht identisch sind, aber andere können nicht übereinstimmen.
Nicht identisch, auf jeden Fall. Es gibt eine ganze Menge von Bereichen, in denen C++ es erlaubt, in C-syntax aus Gründen der Kompatibilität. In jenen Fällen, Fragen wie "was ist der beste Weg, um X zu tun" haben wird, unterschiedliche Antworten in C++. E. g. Objekt-Initialisierung.
Auch: stackoverflow.com/questions/1944041/...
Wie ist das keine Meinung? Sie haben jeweils einen anderen Zweck
Nicht identisch, auf jeden Fall. Es gibt eine ganze Menge von Bereichen, in denen C++ es erlaubt, in C-syntax aus Gründen der Kompatibilität. In jenen Fällen, Fragen wie "was ist der beste Weg, um X zu tun" haben wird, unterschiedliche Antworten in C++. E. g. Objekt-Initialisierung.
Auch: stackoverflow.com/questions/1944041/...
Wie ist das keine Meinung? Sie haben jeweils einen anderen Zweck
InformationsquelleAutor Vijay | 2009-11-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Generell:
Weil es respektiert Umfang und der Typ ist sicher.
Der einzige Nachteil, die ich sehen konnte: wenn Sie möchten, dass die variable eventuell definierte auf der Kommandozeile. Es gibt noch eine alternative:
Wann immer möglich, anstelle von Makros /Ellipse, verwenden Sie ein type-safe alternative.
Wenn Sie wirklich BRAUCHEN, um zu gehen, mit einem makro (zum Beispiel, Sie wollen
__FILE__
oder__LINE__
), dann sollten Sie lieber den Namen Ihres Makros SEHR sorgfältig: in Ihren Namenskonvention Boost empfiehlt allen upper-case, Anfang, indem Sie den Namen des Projekts (hier BOOST_), während durchlesen der Bibliothek, die Sie werden feststellen, diese ist (in der Regel), gefolgt von dem Namen des bestimmten Bereichs (Bibliothek), dann mit einem sinnvollen Namen.Grundsätzlich ist es für lange Namen 🙂
Es ist besser, verwenden Sie#, wenn als #ifdef , aber sonst kann ich Zustimmen. +1.
Dies ist die standard-C++ - Evangelisation. Die Antwort unten ist VIEL deutlicher zu erklären, was die Optionen eigentlich sind und bedeuten. Im besonderen: ich hatte nur ein problem mit "static const". Jemand benutzt es, um zu definieren, etwa 2000 "Konstanten" in einer header-Datei. Dann diese header-Datei enthalten war, in rund 100 ".c" und ".cpp" - Dateien. => 8Mbytes für "consts". Toll. Ja ich weiß, dass Sie möglicherweise verwenden Sie ein linker zu entfernen, nicht referenzierte consts, aber dann ist diese noch immer lässt Sie die "consts", auf welche verwiesen wurde. Running out of space, was ist alles falsch mit dieser Antwort.
Mit einem guten compiler, nur die
static
deren Adresse genommen wird, bleiben soll; und wenn die Adresse genommen wird, könnte man nicht eine#define
oderenum
(keine Adresse)... also habe ich wirklich nicht, um zu sehen, welche alternative hätte verwendet werden können. Wenn Sie können tun, Weg mit "compile-Zeit-Auswertung", Sie könnten auf der Suche nachextern const
statt.Post:
#if
möglicherweise vorzuziehen#ifdef
für Boolesche flags, aber in diesem Fall würde es unmöglich machen, zu definierenvar
als0
von der Befehlszeile aus. Also in diesem Fall#ifdef
mehr Sinn macht, solange0
ist ein Gültiger Wert fürvar
.InformationsquelleAutor Matthieu M.
Es hängt davon ab, was Sie brauchen, der Wert für. Sie (und alle anderen bisher) ausgelassen, die Dritte alternative:
static const int var = 5;
#define var 5
enum { var = 5 };
Ignorieren von Fragen über die Wahl der Namen, dann:
So, in den meisten Kontexten, bevorzugen die 'enum' über die alternativen. Ansonsten, die ersten und letzten Punkte sind wahrscheinlich die Kontrolle der Faktoren, die — und Sie haben zu denken, härter, wenn Sie benötigen, um sofort.
Wenn Sie gefragt wurden C++, dann würden Sie verwenden die option (1) — die statische const — jedes mal.
enum
ist, dass Sie umgesetztint
([C99] 6.7.2.2/3). Ein#define
können Sie angeben, unsigned und long mitU
undL
Suffixe, undconst
können Sie einen Typ aus.enum
Probleme verursachen können, die mit dem üblichen Typ-Konvertierungen.(2) Leute, die IMMER meckern geben Sicherheit. Ich nie verstehen, warum man nicht einfach "#define var ((int)5)" und Hurra du hast die Typsicherheit mit einem definieren.
Sie müsste in eine ganz Besondere Umgebung für Raum ein Anliegen ist. Das heißt, weder
enum
noch#define
verwendet extra Raum per se. Der Wert erscheint in der Objekt-code als Teil der Anleitung eher, als dass Sie den zugewiesenen Speicher in das Daten-segment oder im heap oder auf dem stack. Haben Sie einigen Speicherplatz für diestatic const int
, aber der compiler kann optimieren Sie Weg, wenn Sie nicht nehmen, eine Adresse.Eine weitere 'Stimme' für
enum
s (undstatic const
): Sie können nicht geändert werden. eindefine
werden kann#undefine
'd, wo einenum
undstatic const
sind fest auf den angegebenen Wert.Nein, danke. Eine einfache Konstante ist sicher außerhalb der Klammern. Oder zeigen Sie mir, wie ein Programm, das zu Recht erwartet werden, zu kompilieren würde geändert werden, indem nicht die 5 in Klammern. Wenn das argument einer Funktion-Stil-makro ist, oder wenn es keine Operatoren in dem Ausdruck, dann würden Sie korrekt sein, mir die Schuld, ich hatte nicht die Klammern. Aber das ist nicht der Fall hier.
InformationsquelleAutor Jonathan Leffler
In C, speziell? In C ist die richtige Antwort: verwenden Sie
#define
(oder, falls angemessen,enum
)Während es vorteilhaft ist, haben die Festlegung des lösungsumfangs und der Eingabe der Eigenschaften einer
const
Objekt, in Wirklichkeitconst
Objekte in C (im Gegensatz zu C++) nicht wahr sind Konstanten und sind daher in der Regel nutzlos, in den meisten praktischen Fällen.So, in der C die Wahl sollte davon abhängen, wie Sie planen, verwenden Sie die Konstante. Zum Beispiel können Sie nicht verwenden, eine
const int
Objekt alscase
label (während einer makro funktioniert). Sie nicht verwenden können, eineconst int
Objekt als ein bit-Feld Breite (während einer makro funktioniert). In C89/90, die Sie nicht verwenden können, eineconst
- Objekt angeben, wird ein array-Größe (während einer makro funktioniert). Auch in C99 können Sie nicht verwenden, eineconst
Objekt ein array angeben, die Größe, wenn Sie benötigen ein nicht-VLA array.Wenn dies für Sie wichtig ist, dann wird es bestimmen die Wahl. Die meisten der Zeit, Sie haben keine andere Wahl, als
#define
C. Und vergessen Sie nicht, eine weitere alternative, das erzeugt wahre Konstanten in C -enum
.In C++
const
Objekte sind wahre Konstanten, also in C++ ist es fast immer besser, lieber dieconst
Variante (keine Notwendigkeit für explizitestatic
in C++).Gut, Sie brauchen, um den code, die Sie getestet, und nennen Sie die spezifischen compiler. Mit
const int
Objekte in case-labels ist illegal in allen Versionen der C-Sprache. (Natürlich mit dem compiler ist frei, um ihn zu unterstützen, als ein nicht-standard-C++-ähnlichen Sprache-Erweiterung.)"... und sind daher in der Regel nutzlos, in den meisten praktischen Fällen." Ich bin nicht einverstanden. Sie sind sehr nützlich, solange Sie nicht müssen, verwenden Sie den Namen als Konstanten Ausdruck. Das Wort "Konstante" in C bedeutet etwas, das ausgewertet werden kann zur compile-Zeit;
const
bedeutet nur-lese -.const int r = rand();
ist vollkommen legal.In c++ ist es besser, zu verwenden
constexpr
im Vergleich zuconst
speziell mit derstl
Container wiearray
oderbitset
.müssen Sie getestet haben, in
switch()
Anweisung, nicht incase
. Ich habe nur fing an, diese ebenfalls ☺InformationsquelleAutor AnT
Den Unterschied zwischen
static const
und#define
ist, dass die ehemalige Nutzung der Speicher und die später nicht der Speicher für die Lagerung. Zweitens, Sie können nicht übergeben Sie die Adresse eines#define
in der Erwägung, dass können Sie geben die Adresse einerstatic const
. Eigentlich ist es, was je nach Umstand sind wir uns unter, wir müssen wählen Sie eine zwischen diesen beiden. Beide sind am besten unter verschiedenen Umständen. Bitte gehen Sie nicht davon aus, dass man besser ist als der andere... 🙂Wäre das der Fall gewesen, Dennis Ritchie würde gehalten haben, das beste allein... hahaha... 🙂
Habe es gerade getestet. In der Tat, const int verwendet zusätzlichen Speicher im Vergleich zu #define oder enum. Da wir Programmieren für embedded-Systeme, die wir nicht leisten können, die zusätzliche Speichernutzung. So gehen wir zurück, um mit #define oder enum.
Praktisch gesehen ist es nicht wahr (mehr), dass ein
const
verwenden, Speicher. GCC (getestet mit 4.5.3 und ein paar neuere Versionen) leicht optimiert dieconst int
in eine direkte wörtliche in Ihrem code als mit -O3. Also wenn du niedrige RAM-embedded-Entwicklung (z.B. AVR) - Sie können sicher mit C consts wenn Sie GCC oder einem anderen kompatiblen compiler. Ich habe es nicht getestet, aber erwarten, dass das Geräusch, das gleiche zu tun btw.InformationsquelleAutor wrapperm
In C
#define
ist viel populärer. Sie können diese Werte verwenden, für die Deklaration von array-Größen zum Beispiel:ANSI-C nicht erlaubt, Sie zu verwenden
static const
s in diesem Zusammenhang, soweit ich weiß. In C++ sollten Sie vermeiden, Makros in diesen Fällen. Schreiben Sieund auch verlassen sich
static
denn interne Verlinkung ist impliziert durchconst
bereits [in C++ nur].const int MY_CONSTANT = 5;
in einer Datei und mitextern const int MY_CONSTANT;
in einem anderen. Ich konnte nicht finden alle Informationen, die in der standard (C99 mindestens) überconst
ändern des Standard-Verhalten "6.2.2:5 Falls die Deklaration eines Bezeichners für ein Objekt-Datei Umfang und keine storage-class-specifier, seiner Verknüpfung ist extern".Sorry, über, die. Ich soll gesagt haben, "ist implizit const, die bereits in der C++ - Sprache". Dies ist spezifisch für C++.
es ist schön zu sehen, einige Argumente zusammen die Art und Weise, statt Tonnen von MEINUNG, Wenn es wäre bonus für echte Argumente, du hast es!
Ab C99, das zweite snippet ist legal.
bar
ist ein VLA (variable length array); der compiler ist wahrscheinlich, um code zu generieren, als wenn seine Länge waren konstant.InformationsquelleAutor sellibitze
Ein weiterer Nachteil
const
in C ist, dass Sie können nicht verwenden Sie den Wert in der initialisieren anderenconst
.Selbst dies funktioniert nicht mit einem const, da der compiler nicht sehen es als eine Konstante:
Ich würde gerne verwenden Sie typisierte
const
in diesen Fällen, ansonsten...static uint8_t const ARRAY_SIZE = 16;
plötzlich nicht mehr kompiliert werden kann ein wenig herausfordernd, besonders, wenn die#define ARRAY_SIZE 256
begraben ist zehn Lagen tief in einem Gewirr von Headern. Alle caps nameARRAY_SIZE
ist nach ärger. Reserve ALL_CAPS für Makros, und nie definieren Sie ein makro, das ist nicht in ALL_CAPS form.gute Ratschläge, die ich befolgen.
4 Jahre später haben Sie mich gerettet eine Menge Zeit herauszufinden, warum ich nicht "nest"
const
. Dies könnte mehr von Ihnen positiv bewertet werden!InformationsquelleAutor Gauthier
Wenn Sie können Weg mit es,
static const
hat eine Menge Vorteile. Es gehorcht den normalen Anwendungsbereich Grundsätze, ist sichtbar in einem debugger, und in der Regel befolgt die Regeln, Variablen gehorchen.Jedoch-zumindest in der original-C-standard, es ist nicht wirklich eine Konstante. Wenn Sie
#define var 5
schreiben Sieint foo[var];
als eine Erklärung, aber das kannst du nicht tun (außer als compiler-Erweiterung" mitstatic const int var = 5;
. Ist dies nicht der Fall, in C++, wo derstatic const
version kann verwendet werden, überall dort, wo der#define
- version hat, und ich glaube, dies ist auch der Fall mit C99.Jedoch nie Namen ein
#define
Konstante mit einem Kleinbuchstaben Namen. Es überschreibt jeden möglichen Gebrauch von diesem Namen bis zum Ende der übersetzungseinheit. Makro-Konstanten sein sollte, was tatsächlich aus Ihrem eigenen namespace, die traditionell in Großbuchstaben geschrieben, vielleicht mit einem prefix.const
in C99 ist noch nicht eine wirkliche Konstante. Sie können erklären, array-Größe, die mit einemconst
in C99, aber nur, weil C99 unterstützt Variable Length Arrays. Aus diesem Grund, wird es nur dort arbeiten, wo VLAs sind erlaubt. Zum Beispiel, auch in C99 kann man noch nichtconst
zu erklären Größe der Mitglied-array in einerstruct
.Es ist zwar richtig, dass C99 wird nicht lassen Sie tun, dass GCC (getestet mit 4.5.3) wird perfekt lassen Sie initialisieren von arrays mit einer
const int
Größe, als ob es eine C++ - const oder ein makro. Ob Sie wollen hängen diese Abweichung von GCC aus dem standard ist natürlich Eure Wahl, ich hatte persönlich mit ihm zu gehen, es sei denn, Sie können wirklich vorhergesehen mit einem anderen compiler als GCC oder Clang, die letztere hat die gleiche Funktion hier (getestet mit Clang 3.7).InformationsquelleAutor David Thornley
Schrieb ich quick-test-Programm zur Demonstration der Unterschied:
Diese kompiliert mit diesen Fehlern und Warnungen:
Beachten Sie, dass enum gibt einen Fehler beim definieren gibt eine Warnung aus.
InformationsquelleAutor Michael Potter
#define var 5
verursacht Sie Probleme, wenn Sie Dinge wiemystruct.var
.Beispielsweise
Den Präprozessor ersetzt und der code nicht kompiliert. Aus diesem Grund, traditionellen coding-Stil schlagen vor, alle Konstanten
#define
s verwendet Großbuchstaben, um Konflikte zu vermeiden.InformationsquelleAutor Non-maskable Interrupt
Ist es IMMER vorzuziehen, const statt #define. Das ist, weil const ist, behandelt der compiler und #define vom Präprozessor. Es ist wie #define selbst ist nicht Teil der code (grob gesagt).
Beispiel:
Den symbolischen Namen PI kann niemals gesehen werden, der von Compilern; es kann entfernt werden, indem der Präprozessor bevor der source-code bekommt sogar einen compiler. Als ein Ergebnis, der name PI kann nicht eingegeben erhalten, in der symbol-Tabelle. Dies kann verwirrend sein, wenn Sie einen Fehler während der Kompilierung in denen die Verwendung der Konstanten, weil die Fehlermeldung beziehen können, 3.1416, nicht PI. Wenn PI definiert wurden, in eine header-Datei, die Sie nicht geschrieben, Sie hatte keine Ahnung, wo das 3.1416 kam.
Dieses problem kann auch dann auftauchen, in einem symbolischen debugger, weil, wieder, der name, den Sie sind der Programmierung mit möglicherweise nicht in der symbol-Tabelle.
Lösung:
InformationsquelleAutor suren
Die definition
nicht immer einen Konstanten Wert definieren. Einige Compiler (z.B. tcc-0.9.26) nur Speicher identifiziert mit dem Namen "const_value". Mit der Kennung "const_value" können Sie nicht ändern diese Speicher. Aber Sie konnte immer noch ändern, die Speicher mit einer anderen Kennung:
Dies bedeutet, dass die definition
ist der einzige Weg, um einen Konstanten Wert definieren, das kann nicht modifiziert werden durch irgendwelche Mittel.
#define
können auch geändert werden durch ändern der Computer-code.Sie sind teilweise Recht. Getestet habe ich den code mit Visual Studio 2012 und es gibt
5
. Aber kann man nicht ändern#define
weil es ein Präprozessor-makro. Es existiert nicht in das binäre Programm. Wenn man wollte ändern Sie alle Orte, an denenCONST_VALUE
verwendet wurde, hatte man es zu tun eins nach dem anderen.Angenommen, Sie schreiben
#define CONST 5
, dannif (CONST == 5) { do_this(); } else { do_that(); }
, und der compiler entfällt dieelse
Zweig. Wie Sie vorschlagen, um die Maschine Bearbeiten code zu ändernCONST
6?Ich habe nie gesagt, dass es getan werden kann, leicht und zuverlässig. Nur, dass
#define
ist nicht bullet-proof.Mein Punkt ist, dass "die Bearbeitung der Maschine, code" ist keine sinnvolle Art und Weise zu duplizieren die Wirkung der änderung des Wertes einer
#define
. Die einzige wirkliche Möglichkeit, dies zu erreichen, Bearbeiten Sie den Quellcode und kompilieren Sie neu.InformationsquelleAutor user2229691
Glaube nicht, dass es eine Antwort für "welche ist immer die beste", sondern, wie Matthieu, sagte
static const
typsicher ist. Mein größtes Hauptärgernis mit
#define
, obwohl, ist, wenn das debugging in Visual Studio Sie nicht beobachten Sie die Variablen. Es gibt eine Fehlermeldung, dass das symbol nicht gefunden werden kann.InformationsquelleAutor Afcrowe
Übrigens, eine alternative zu
#define
, die eine korrekte Festlegung des lösungsumfangs verhält sich aber wie ein "richtiges" konstant", "enum". Zum Beispiel:In vielen Fällen ist es nützlich zu definieren Aufzählungstypen und erstellen von Variablen dieser Typen; wenn das geschehen ist, Debugger können Sie die Anzeige der Variablen nach Ihrer enumeration name.
Noch eine wichtige Warnung mit dabei, dass, aber: C++, Aufzählungstypen haben eingeschränkte Kompatibilität mit Ganzzahlen. Zum Beispiel, standardmäßig kann man nicht führen Arithmetik auf Ihnen. Ich finde, dass ein neugieriger Standardverhalten für enums; es wäre zwar schön gewesen, haben eine "strikte enum" - Typ, der Wunsch, über C++ im Allgemeinen kompatibel mit C, ich würde denken, die default-Verhalten einer "enum" Art werden sollte, austauschbar mit Integer-zahlen.
int
, so dass die "enum-hack" kann nicht verwendet werden mit anderen integer-Typen. (Die enumeration type ist kompatibel mit einigen der Implementierung definierte integer-Typ, nicht unbedingtint
, aber in diesem Fall der Typ ist anonym, so dass spielt keine Rolle.)Seit ich schrieb die oben, ich habe gelesen, dass MISRA-C krächzen, wenn ein compiler weist einen anderen Typ als
int
auf eine Aufzählung typisierte Variablen (die Compiler sind erlaubt, das zu tun) und man versucht zu ordnen, um eine solche variable ein Mitglied seiner eigenen Aufzählung. Ich Wünsche Normungsgremien möchte hinzufügen, tragbaren Weise zu deklarieren integer-Typen mit der angegebenen Semantik. JEDER - Plattform, unabhängig vonchar
Größe, sollte in der Lage sein, um z.B. deklarieren Sie einen Typ wrap mod 65536, selbst wenn der compiler hat vieleAND R0,#0xFFFF
oder gleichwertige Anweisungen.Sie können
uint16_t
, aber natürlich ist das nicht ein enumeration-Typ. Es würde nett sein, damit der Benutzer angeben, der integer-Typ repräsentiert einen bestimmten Typ Aufzählung, aber Sie können viel erreichen den gleichen Effekt mit einemtypedef
füruint16_t
und eine Reihe von#define
s für die einzelnen Werte.Ich verstehe, dass aus historischen Gründen, wir stecken mit der Tatsache, dass einige Plattformen bewerten
2U < -1L
als wahr und andere als falsch, und wir jetzt stecken, mit der Tatsache, dass einige Plattformen implementieren, die einen Vergleich zwischenuint32_t
undint32_t
als signierte und einige als unsigned, aber das bedeutet nicht, dass der Ausschuss konnte nicht definieren, eine aufwärts-kompatible Nachfolger von C, enthält Arten, deren Semantik wäre konsistent auf allen Compilern.InformationsquelleAutor supercat
Obwohl die Frage war über zahlen, es ist erwähnenswert, dass #define-und Enumerationen, die nutzlos sind, wenn Sie brauchen eine Konstante Struktur oder string. Diese sind beide in der Regel an eine Funktion übergeben als Pointer. (Mit Streichern, es ist erforderlich; mit Strukturen, es ist viel effizienter.)
Als für ganze zahlen, wenn Sie in einer integrierten Umgebung mit sehr begrenztem Speicher, müssen Sie möglicherweise Gedanken machen, wo die Konstante gespeichert und wie greift es kompiliert werden. Der compiler könnte hinzufügen, zwei consts zur Laufzeit, aber fügen Sie zwei #defines beim kompilieren. Eine #define-Konstante umgewandelt werden kann in eine oder mehrere MOV [unmittelbare] Anweisungen, was bedeutet, dass die Konstante ist effektiv im Programmspeicher abgelegt. Eine const-Konstante gespeichert werden in der .const-Abschnitt in der Daten-Speicher. Bei Systemen mit Harvard-Architektur, könnte es Unterschiede in der performance und in der Speichernutzung, obwohl Sie würde wahrscheinlich kleine. Sie könnte die Sache für hard-core-Optimierung von inneren Schleifen.
InformationsquelleAutor Adam Haun
Einen einfachen Unterschied:
Beim pre-processing-Zeit, die Konstante ist durch Ihren Wert ersetzt.
So könnte man nicht für den dereference operator, um einem definieren, aber Sie können anwenden der dereference-operator auf eine variable.
Als würden Sie annehmen, definieren, die schneller ist, statische const.
Nachdem Sie zum Beispiel:
können Sie nicht tun
printf("address of constant is %p",&mymax);
.Aber mit
können Sie tun
printf("address of constant is %p",&mymax_var);
.Mehr klar, die definiert ist durch den Wert ersetzt bei den pre-processing-Phase, so haben wir nicht jede variable, die im Programm gespeichert. Wir haben nur den code aus dem text-segment des Programms, wo die definieren, verwendet wurde.
Jedoch für static const haben wir eine variable, zugewiesen ist, irgendwo. Für gcc, statische const zugeordnet sind, in das text-segment des Programms.
Oben, ich wollte sagen, über den Referenz-operator, so ersetzen Sie dereferenzieren mit Referenz.
const
qualifier. C nicht symbolica Konstanten, die andere als enum-Konstanten. Einconst int
ist eine variable. Auch Sie verwechseln Sprache und spezifische Implementierungen. Es gibt keine Vorschrift, wo das Objekt platziert werden. Und es ist auch nicht wahr für gcc: in der Regel setzt esconst
qualifizierten Variablen in der.rodata
Abschnitt. Aber das hängt von der Zielplattform. Und du meinst den Adresse-von operator&
.InformationsquelleAutor mihaitzateo
Schauten wir uns den erzeugten assembler-code auf der MBF16X... Beide Varianten bringen den gleichen code für arithmetische Operationen (ADD Immediate, zum Beispiel).
So
const int
wird bevorzugt für die Typüberprüfung während#define
ist im alten Stil. Vielleicht ist es ja compiler-spezifisch sind. So überprüfen Sie Ihre erzeugten assembler-code.InformationsquelleAutor guest
Ich bin nicht sicher, ob ich richtig bin aber meiner Meinung nach fordert
#define
d-Wert ist viel schneller als das aufrufen anderer normal deklarierte variable (oder const Wert).Es ist, weil, wenn das Programm ausgeführt wird, und es braucht einige normal deklarierte variable, die es braucht, um zu springen, um die genaue Stelle im Speicher zu bekommen, dass eine variable.
Im Gegenteil, wenn Sie es verwenden
#define
d-Wert, wird das Programm nicht benötigen, um zu springen, um alle Speicher zugewiesen, es dauert nur den Wert. Wenn#define myValue 7
und das Programm aufrufenmyValue
verhält es sich genauso, als wenn man ruft einfach7
.InformationsquelleAutor pajczur