Ich habe eine interessante Tatsache gefunden, und ich habe nicht verstanden, wie es funktioniert.
Das folgende Stück Code funktioniert einfach perfekt.Array-Größe mit const Variable in C
#include <stdio.h>
int main(){
const int size = 10;
int sampleArray[size];
typedef char String [size];
return 0;
}
Dann habe ich versucht, nur und nur die konstante Variable mit einem globalen Bereich zu verwenden, und es ist immer noch in Ordnung. Auch ich bekam die folgende
#include <stdio.h>
const int size = 10;
int main(){
int sampleArray[size];
typedef char String [size];
return 0;
}
Aber wenn ich die Arrays des Oszilloskops auf den globalen Wandel:
error: variably modified ‘sampleArray’ at file scope
#include <stdio.h>
const int size = 10;
int sampleArray[size];
typedef char String [size];
int main(){
return 0;
}
Und ich habe es nicht bekommen! Wenn ich die const-Variable für ex ersetzen würde. zu #define
wäre es auch okay.
Ich weiß, dass die Variable #define vorverarbeitet ist, und soweit ich weiß, ist die Konstante const nur schreibgeschützt. Aber was macht den globalen Rahmen überhaupt?
Ich verstehe nicht, was das Problem mit dem dritten Stück Code ist, wenn der zweite nur okay ist.
Einige Details: C hat "const" Objekte, aber keine _constant_ one. Obwohl "const" anscheinend _constant_ impliziert, ist ein "const" -Objekt nicht _constant_, sondern eher "dieses Objekt sollte sich nicht ändern, aber wenn eine Änderung versucht wird - wer weiß, was passieren könnte?" In C ist eine wahre _Constant_ ein Code wie "42", der eine _integer Konstante_ mit dem Typ von "int" ist. Daher ist 'const int size = 10;' nicht eine _constant_-Variable. – chux
Das Array hat keine konstante Größe, sondern ist ein Array variabler Länge. – Olaf
Wie sie gesagt haben, hat C 'const' Objekte, die eigentlich nur lesbare * Variablen * sind. Vgl. C++, das wahre "const" Objekte hat, die eigentlich Kompilierzeit * Konstanten * sind. –