syntaktische Frage
-
Hallo zusammen,
ich möchte meine constanten Variablen offline deklarieren damit der Compiler besser optimieren kann. Es handelt sich um eine 2D Matrix. Die Header Datei ist echt einfach. Leider klappt folgendes nicht (masken.h):
// Beginn der Headerdatei short G[5][5]; // Gauss SIGMA=1.4 G[0][0] = 2; G[0][1] = 4; G[0][2] = 5; G[0][3] = 4; G[0][4] = 2; G[1][0] = 4; G[1][1] = 9; G[1][2] = 12; G[1][3] = 9; G[1][4] = 4; G[2][0] = 5; G[2][1] = 12; G[2][2] = 15; G[2][3] = 12; G[2][4] = 5; G[3][0] = 4; G[3][1] = 9; G[3][2] = 12; G[3][3] = 9; G[3][4] = 4; G[4][0] = 2; G[4][1] = 4; G[4][2] = 5; G[4][3] = 4; G[4][4] = 2; // Ende der Headerdatei
Allerdings macht mich stutzig dass es zur Laufzeit wiederum funktioniert.
- Warum kann der Compiler die Headerdatei nicht einbinden???
- Wie geht es richtig???Grüße
-
G[0][0] = 2;
ist eine Zuweisung. Sowas geht nur innerhalb von Funktionen. Für das was du offensichtlich vorhast, gibt es Initialisierungslisten:
int foo[2] = {0, 1};
Und btw. fehlt da nicht noch ein const?
-
schreib das mal so:
const short G[5][5] = {2, 4, 5, 4, 2, 4, 9, 12, 9, 4 , /* ...usw. usw*/ }; // C hat "const" von C++ geerbt, sowas gibts auch!
-
ohaoha schrieb:
// C hat "const" von C++ geerbt, sowas gibts auch!
Nicht wirklich.
-
Tim schrieb:
ohaoha schrieb:
// C hat "const" von C++ geerbt, sowas gibts auch!
Nicht wirklich.
afaik schon
-
Also erstens gibt es const schon seit C89 (würde mich wundern wenn nicht schon in K&R). Der erste C++ Standard ist jedoch von 98. So gesehen kann es nicht von C++ geerbt sein. Zweitens verhält sich const in C und C++ unterschiedlich. In C++ gibt es "echtes" const. In C nicht.
-
http://publications.gbdirect.co.uk/c_book/chapter8/const_and_volatile.html schrieb:
These are new in Standard C, although the idea of const has been borrowed from C++.
-
Tatsache, gibt es echt erst seit C89.
-
Danke schön. War mal wieder ganz gut zu wissen!
-
Tim schrieb:
In C++ gibt es "echtes" const. In C nicht.
ist beides nicht echt, man kann es wegcasten
'const' erlaubt nur compiler/linker gewisse optimierungen zu machen, daten ins ROM packen, programmierfehler erkennen, variablen wegzulassen etc.
-
Tim schrieb:
Also erstens gibt es const schon seit C89 (würde mich wundern wenn nicht schon in K&R). Der erste C++ Standard ist jedoch von 98. So gesehen kann es nicht von C++ geerbt sein. Zweitens verhält sich const in C und C++ unterschiedlich. In C++ gibt es "echtes" const. In C nicht.
Der C-Standardisierungsprozess läuft seit ungefähr 1980. Bjarne Stroustrup hat damals mit der Idee eines readonly-Schlüsselworts gespielt, die Idee hat das ANSI-C-Kommitee aufgegriffen, aber const draus gemacht. In C++ wurde es dann der Kompatibilität wegen auch const genannt. Man kann also nicht so einfach sagen C hats von C++ oder umgekehrt. Und wer wann was standardisiert hat ist nicht immer so wichtig, C with classes gibts auch schon seit ca. 1980, C++ seit 1984.
(Soweit ich mich erinnere. Das steht in Design&Evolution)