Deklaration von Array
-
Hallo Leute,
hab ein Problem zur Deklaration von array! Und zwar hab ein 2dimensionalen Array in einer header Datei deklariert, aber der Compiler mekert und deklariert tausende Fehlern, z.bp dass 0 nicht legaler array wert! hier ein Teil zur Deklaration
/*
unsigned char Zeichensatz[128][5];
Zeichensatz[65][0]=0b01111110; //A
Zeichensatz[65][1]=0b10001000;
Zeichensatz[65][2]=0b10001000;
Zeichensatz[65][3]=0b10001000;
Zeichensatz[65][4]=0b01111110;
*/
sobald ich diese Deklaration innerhalb einer Funktion schreibe mekert er nicht mehr!
kann mir bitte jemand weiter helfen?????
-
für atari? *g*
welchen compiler verwendest du? (mich würde interessieren, welcher compiler 0b.. erkennt.. )ps: auf jeden gibt es solche.. deswegen frag ich.
pps: zum bleistift bei microcontrollern
-
ich benutzte den ICCAVR, arbeitet wie C Compiler!!!
-
simsim schrieb:
hier ein Teil zur Deklaration
/*
unsigned char Zeichensatz[128][5];
Zeichensatz[65][0]=0b01111110; //A
Zeichensatz[65][1]=0b10001000;
Zeichensatz[65][2]=0b10001000;
Zeichensatz[65][3]=0b10001000;
Zeichensatz[65][4]=0b01111110;
*/
sobald ich diese Deklaration innerhalb einer Funktion schreibe mekert er nicht mehr!Das ist keine Deklaration. Die erste Zeile ist eine Definition, und die anderen sind Anweisungen.
Definitionen sollte man nicht in Header schreiben, sondern in C-Dateien, sonst kommt es zu Linkerfehlern, wenn der Header in mehreren C-Dateien eingebunden wird. Aber das ist hier nicht das Problem.
Anweisungen dürfen grundsätzlich nur innerhalb von Funktionen stehen. Du kannst das ganze aber auch außerhalb von Funktionen als Initialisierer schreiben:
unsigned char Zeichensatz[128][8] = { /* 0 bis 31 */ /* hier die Codes für die Steuerzeichen, also alles < 32. Ich nehme an, dass du dafür keine graphische Darstellung brauchst, also fülle ich das mit Nullen auf */ { 0, 0, 0, 0, 0, 0, 0, 0 }, /* 0 */ { 0, 0, 0, 0, 0, 0, 0, 0 }, /* 1 */ ... { 0, 0, 0, 0, 0, 0, 0, 0 }, /* 31 */ { 0, 0, 0, 0, 0, 0, 0, 0 }, /* 32 Leerzeichen */ { /* 33: Ausrufezeichen: */ 0b00010000, 0b00010000, /* ... */
Ich hoffe das Prinzip ist klar.
Wie gesagt, das gehört in eine eigene C-Datei. Die Deklaration für den Header sieht dann so aus:
extern unsigned char Zeichensatz[128][8];
Und wegen dem 0b-Präfix, das gibts in Standard-C nicht. Es wär also besser gewesen, du hättest dazu gesagt, welchen Compiler und welche von dessen Spracherweiterungen du benutzt.
-
Hi,
das ist kein standard C-Compiler sondern ICCAVR zum Mikrocontroller programmierung! Das mit der Definition von Array ist mir dann klar danke :-)) Aber ich verstehe immer noch nicht wie hast Du es mit Dem Ausrufezeichen gemacht?? Kannst Du es mir bitte erklären?
/* 33: Ausrufezeichen: */
0b00010000,
0b00010000,
/* ... */
-
simsim schrieb:
das ist kein standard C-Compiler sondern ICCAVR zum Mikrocontroller programmierung!
Ich weiß, ich meine nur, dass du es hättest am Anfang dazusagen sollen.
Aber ich verstehe immer noch nicht wie hast Du es mit Dem Ausrufezeichen gemacht?? Kannst Du es mir bitte erklären?
/* 33: Ausrufezeichen: */
0b00010000,
0b00010000,
/* ... */Ich verstehe nicht ganz, was da unklar ist. Du willst graphische Symbole (wohl für ein LCD-Display o.ä.?) definieren, jedenfalls hast du das an Stelle 65 für das A gemacht. In gleicher Weise steht an Stelle 33 das Ausrufezeichen. Ich habe leider deinen Code nicht genau genug angeguckt und nicht gesehen, dass dein A erstens auf der Seite liegt und zweitens nur 5 statt Zeilen breit ist, aber das dürfte dich eigentlich nicht durcheinander bringen, es geht ja nur ums Prinzip.
-
du kannst in c keine binärzahlen verwenden. es geht nur hex mit 0x und oktal mit 0 am anfang. 0b für binär gibt es nicht.
Zeichensatz[65][0]=0x7E; Zeichensatz[65][1]=0x88; Zeichensatz[65][2]=0x88; Zeichensatz[65][3]=0x88; Zeichensatz[65][4]=0x7E;
-
@konfuzius
doch. nicht in ansi c, aber das gibt es.den thread mal genau lesen
spezielle compiler verstehen 0b...