Frank schrieb:
> Warum würde man das nicht z.B. als define machen?
Makros ("#define") sollte man grundsätzlich so wenig wie möglich
verwenden, da sie diverse Probleme haben (globaler Scope, kein Typ,
keine Referenz möglich). "static const" hat diese Probleme nicht. Leider
sind Konstanten in C nur "read-only Variablen", somit kann man einen
solchen Wert z.B. nicht für Array-Größen oder als Wert für weitere
Konstanten verwenden. Dann muss man ein Makro nutzen.
In C++ hingegen ist "static const" eine echte Konstante und sollte wann
immer möglich gegenüber Makros bevorzugt werden. Noch besser ist "static
constexpr".
Frank schrieb:
> die Wirkung wäre doch die selbe oder nicht?
Leider nein. Ein Makro ist nur eine primitive Textersetzung. Eine
Konstante ist ein Sprachelement. Mit einem Makro geht nicht:
1 | fwrite (&numberOfBlocks, sizeof (numberOfBlocks), 1, file);
|
Dies führt zu Problemen
1 | void foo (void) { int numberOfBlocks = 42; }
|
und bei überladenen Funktionen oder templates ist unklar was jetzt genau
bei "foo(numberOfBlocks)" passiert, da der Typ von "numberOfBlocks" nur
implizit ist (hier: int). Bei "static const" sieht das anders aus.