Hallo zusammen
Ich habe folgende Frage:
Was ist der genaue Unterschied zwischen
und
Im 1. Fall meine ich eine globale Konstante. Weder eine statische lokale Funktionsvariable noch einen statische Klassen Member.
Mir ist klar, dass im 2. Fall der Präprozessor vor dem Kompilieren alle i im Quelltext durch 5 ersetzt. Doch dann steht da einfach ein Literal im Code und der Compiler muss ja diese Zahl auch irgendwo im Speicher platzieren.
Mich interessiert dies vor Allem, für Code von Embedded Systemen, die kein Betriebsystem mit Loader haben, sondern das Programm in ein ROM/Flasch gebrannt haben.
Werden Zahlen, die als Literale im Quelltext vorkommen an einer Anderen Stelle im Speicher (Programmspeicher) als const Variablen (Datenspeicher) abgelegt?
Mich interessiert vor Allem, ob #define wirklich effizienter ist als static const. Eigentlich ist ja static const sicherer: Typen-Sicher, lokal beschränkt...
Aber in vielen Quelltexten (besonders C) wird #define bevorzugt verwendet.
Gruss Lukas
Ich habe folgende Frage:
Was ist der genaue Unterschied zwischen
Code:
static const int i = 5;
Code:
#define i 5
Im 1. Fall meine ich eine globale Konstante. Weder eine statische lokale Funktionsvariable noch einen statische Klassen Member.
Mir ist klar, dass im 2. Fall der Präprozessor vor dem Kompilieren alle i im Quelltext durch 5 ersetzt. Doch dann steht da einfach ein Literal im Code und der Compiler muss ja diese Zahl auch irgendwo im Speicher platzieren.
Mich interessiert dies vor Allem, für Code von Embedded Systemen, die kein Betriebsystem mit Loader haben, sondern das Programm in ein ROM/Flasch gebrannt haben.
Werden Zahlen, die als Literale im Quelltext vorkommen an einer Anderen Stelle im Speicher (Programmspeicher) als const Variablen (Datenspeicher) abgelegt?
Mich interessiert vor Allem, ob #define wirklich effizienter ist als static const. Eigentlich ist ja static const sicherer: Typen-Sicher, lokal beschränkt...
Aber in vielen Quelltexten (besonders C) wird #define bevorzugt verwendet.
Gruss Lukas