Hallo,
Ja, dass ein Literal und eine Konstante jeweils unveränderliche Werte haben, ist ihre Gemeinsamkeit. Man darf das aber durchaus namentlich und funktional auseinanderhalten, der Compiler tut es ja auch.
tut er das wirklich? Ein typischer C-Compiler tut das beispielsweise nicht. Definiere ich da zum Beispiel einen Satz von Konstanten:
enum
{ cRED = 0xFF0000,
cGREEN = 0x00FF00,
cBLUE = 0x0000FF
};
Wo immer ich im weiteren Quellcode eine dieser drei Konstanten verwende, setzt der Compiler direkt den zugehörigen Wert ein, so als ob er als Literal im Code stünde.
Dasselbe passiert übrigens auch, wenn ich die Konstanten mit der Präprozesser-Direktive #define definiere. Wichtiger Unterschied: Bei der Definition mit enum bleiben die symbolischen Namen zumindest in den Debug-Informationen erhalten, bei #define nicht.
Ein Literal steht immer wieder neu im Kompilat, wann immer es auftaucht, eine Konstante wird nur einmal angelegt und dann immer wiederverwendet.
Ich gehe eigentlich davon aus, dass eine benannte Konstante überhaupt nirgends abgelegt wird, sondern vom Compiler überall dort in den Code eingesetzt wird, wo sie auftaucht.
Und damit wäre der einzige Unterschied zwischen einem Literal und einer benannten Konstanten, dass letztere nur einmal zentral definiert und dann an beliebig vielen Stellen genutzt werden kann, während man Literal-Konstanten an jeder Verwendungsstelle einzeln pflegen muss.
Ciao,
Martin
Ich stamme aus Ironien, einem Land am sarkastischen Ozean.