C Problem mit Array-Deffinition

schulze_91

Newbie
Registriert
Nov. 2009
Beiträge
1
hallo,
ich habe folgendes programm geschrieben , jedoch sagt mit der pc das das array nicht richtig deffiniert ist. er sagt mir syntax error near char , damit ist die zeile gemeint:
Code:
 	char Anzeige[9][7]={{0,0,0,0,1,1,0},		//Zahl1

hier der ganze code:
Code:
 #include<reg517a.h>
 void zeile(char spalte);
 char taster[4][4]={{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}};
 void wait1ms(int k);
 int i;
 void main(void)
  {
   char blink[8];
   		 char Anzeige[9][7];
    	P1=0;
	P4=0;
	P8=0x0f;
	   blink[0]=0x01;
	 blink[1]=0x02;
	 blink[2]=0x04;
	 blink[3]=0x08;
	 blink[4]=0x10;
	 blink[5]=0x20;
	 blink[6]=0x40;
	 blink[7]=0x80;
	 
 	char Anzeige[9][7]={{0,0,0,0,1,1,0},		//Zahl1
					 	 {1,0,1,1,0,1,1},
					 	 {1,0,0,1,1,1,1},
					 	 {1,1,0,0,1,1,0},
						 {1,1,0,1,1,0,1},
						 {1,1,1,1,1,0,1},
						 {0,0,0,0,1,1,1},
						 {1,1,1,1,1,1,1},
						 {1,1,0,1,1,1,1}};	   //Zahl9


	while(1)
		{
			P6=1;
		 	for(i=0;i<9;i++)
		 		{
					P4=Anzeige[i];
					wait1ms(2000);
				}	
				
			
				
		
		}
 }

 void zeile(char spalte)
 	{
 		if((P8&0x01)==0)
		taster[spalte][0]=1;
		if((P8&0x02)==0)
		taster[spalte][1]=1;
		if((P8&0x04)==0)
		taster[spalte][2]=1;
		if((P8&0x08)==0)
		taster[spalte][3]=1;
	}

void wait1ms(int k)
	{
		int i,j;
		for(j=0;j<k;j++)
		for(i=0;i<122;i++);
	}
 
Das hier:

char Anzeige[9][7];

muss weg. Dann sollte es gehen. Anzeige ist doppelt definiert.

MfG

Arnd
 
das erste
char Anzeige[9][7]; muss weg.
beim 2.
char Anzeige[9][7]={{},....{}} müssen die Matrixdimensionen [9][7] weg, denn du gibst ja die Größe der Matix in dem {{},....{}}Block an.
 
muro4ever schrieb:
das erste
char Anzeige[9][7]; muss weg.
beim 2.
char Anzeige[9][7]={{},....{}} müssen die Matrixdimensionen [9][7] weg, denn du gibst ja die Größe der Matix in dem {{},....{}}Block an.

Anmerkung: die Angaben über die Feldgrößen sind bei nachfolgenden Initialisierungen nicht zwingend erforderlich, aber auch nicht verboten!
Initialisierungen dieser Art sind auch nur bei der Variablendeklaration möglich - eine spätere Zuweisung in dieser Syntax ist nicht möglich.

Zudem sollte vielleicht noch erklärt werden, warum 'Anzeige' entfernt werden muss: Variablen sind innerhalb eines Sichtbarkeitsbereichs (Funktionen, Anweisungsblöcke, etc.) eindeutig. Eine nochmalige Deklaration von 'Anzeige' in einer tieferen Ebene ist durchaus möglich - ein Beispiel:

Fehler:
Code:
void func() {
	int i;
	i=1;
	int i; // 2. Deklaration innerhalb des Sichtbarkeitsbereichs
	i=2;
}

Möglich, birgt jedoch Fallstricke:
Code:
void func() {
	int i;
	i=1;
	if (i==1) { // neue Sichtbarkeit
		int i; // 2. Deklaration, daher möglich - ACHTUNG: i mit dem Wert 1 ist hier nicht mehr sichtbar!!!
		i=2;
	}
}
 
@XunnD: Dem kann man jedoch noch etwas hinzufügen:
Code:
void func() {
	int i;
	i=1;
	if (i==1) { // neue Sichtbarkeit
		int i; // 2. Deklaration, daher möglich - ACHTUNG: i mit dem Wert 1 ist hier nicht mehr sichtbar!!!
		i=2;
	}

	i=3; // Hier wird das erste i, welches den Wert 1 hat, überschrieben, das i aus der 2. Deklaration ist hier nicht mehr sichtbar!!!
}

Gruß
BlackMark
 
BlackMark schrieb:
@XunnD: Dem kann man jedoch noch etwas hinzufügen:

...code...

Gruß
BlackMark

Man kann sogar eins draufsetzen: das 'int i;' aus dem Anweisungsblock der if-Bedingung ist dort nicht nur mehr 'nicht mehr sichtbar' sondern auch nicht mehr gültig, da auf dem Stack angelegt.
Mit dem Verlassen des Anweisungsblocks werden dort angelegte Variablen wieder freigegeben.

ACHTUNG: Speicher, der innerhalb eines Anwendungsblocks auf dem Heap erzeugt wird (malloc, calloc, etc.), wird nicht implizit freigegeben.
 
Zurück
Oben