Globales Array mit size = const int
-
Bashar schrieb:
SIZE ist eine const-qualifizierte Variable, keine Konstante. Warum auch immer.
weils die syntax für eine variablendefinition ist. man kann compile-time konstanten ja schon mit '#define' und 'enum' anlegen, wozu also noch eine dritte möglichkeit, die vor allem sytaktisch überhaupt nicht so toll wäre?
LordJaxom schrieb:
ich würde size nicht const machen....
Dann funktioniert's in C++ nicht mehr.
ich glaub' nicht, dass frickelige C++-konstrukte für ein C programm irgendeine relevanz haben.
-
const-freak schrieb:
ich glaub' nicht, dass frickelige C++-konstrukte für ein C programm irgendeine relevanz haben.
Ich glaube durchaus, dass C++ Relevanz hat, wenn die Ursprungsfrage sich auf unterschiedliches Verhalten von C und C++ bezieht.
-
LordJaxom schrieb:
Ich glaube durchaus, dass C++ Relevanz hat, wenn die Ursprungsfrage sich auf unterschiedliches Verhalten von C und C++ bezieht
sorry, hast recht, das hab' ich glatt übersehen.
KasF: guckst du --> http://david.tribble.com/text/cdiffs.htm
-
Bashar schrieb:
SIZE ist eine const-qualifizierte Variable, keine Konstante. Warum auch immer. Lokal geht das, weil lokale Arrays ab C99 auch mit variabler Größe angelegt werden können. In C++ geht das, weil SIZE dort ein compilezeit-konstanter Ausdruck ist.
Also ich habe jetzt einen embedded- C- Compiler mit der "define-", der "const" und der "const int-" Variante gefüttert, an der Binary ändert sich rein gar nichts, er nimmt immer einen zur Compiletime konstanten Wert an, keine Warning oder sowas. Ich kann ihn aber zwingen, Konstante im RAM anzulegen, dann kommt es zum eingangs erwähnten Fehler.
Meine Frage ist nun, worin der Sinn liegen soll, daß eine Konstante als unveränderliche Variable mit einer Konstanten initialisiert definiert ist. Mir erscheint das völlig unsinnig.
-
pointercrash() schrieb:
Meine Frage ist nun, worin der Sinn liegen soll, daß eine Konstante als unveränderliche Variable mit einer Konstanten initialisiert definiert ist. Mir erscheint das völlig unsinnig.
manchmal ist es sinnvoll, dass eine konstante physikalisch vorhanden ist (im ROM oder so), so dass man z.b. die adresse davon nehmen kann. sowas ist ja mit compile-time konstanten nicht möglich.
-
const-freak schrieb:
manchmal ist es sinnvoll, dass eine konstante physikalisch vorhanden ist (im ROM oder so), so dass man z.b. die adresse davon nehmen kann. sowas ist ja mit compile-time konstanten nicht möglich.
Du hast recht!
. Ein &size an eine Funktion übergeben und Tadaa
schon wächst ROMDATA um zwei Bytes (int16). Mich verblüfft, daß der Compiler tatsächlich unterscheidet, ob er das nur zur Compiletime oder auch zur Runtime braucht. Soll mir aber recht sein ...
-
LordJaxom schrieb:
In C99 gibt es variable Arrays. In C89 ist dieser Code ungültig.
Was bei "globalen" Arrays aber natürlich auch in C99 nicht gehen würde.
-
Tim schrieb:
LordJaxom schrieb:
In C99 gibt es variable Arrays. In C89 ist dieser Code ungültig.
Was bei "globalen" Arrays aber natürlich auch in C99 nicht gehen würde.
hehe, Pelles-C hatte mal einen bug, dabei konnte man tatsächlich 'globale VLAs' anlegen. das wurde natürlich wieder ausgebaut, weils nicht C99 kompatibel ist. im GCC wär's bestimmt drin geblieben und man hätte es 'compiler-erweiterung' genannt.
-
Aha, komisches C
Die Seite http://david.tribble.com/text/cdiffs.htm kannte ich natürlich schon, nur dachte ich es geht hier um ne C Eigenheit und nicht und Diff. zw. C und C++.const-freak schrieb:
man kann compile-time konstanten ja schon mit '#define'
#define in einem Satz mit Compile-Time passt irgendwie nicht. Ist wahrscheinlich wieder Ansichtssache und würde in Richtung Philosopie gehen ...
( Ich mag keine define's :: #define = böse )
-
KasF schrieb:
#define in einem Satz mit Compile-Time passt irgendwie nicht.
is ja mal egal. dann nenn' es 'pre-compiletime' oder wie auch immer. wichtig ist ja nur, dass es nicht zur laufzeit ausgewertet wird.
KasF schrieb:
( Ich mag keine define's :: #define = böse )
[/quote]
selber schuld.