Forum: Compiler & IDEs C Felermeldung - Warum?


von Valentin S. (lochrasterer)


Lesenswert?

Hallo liebes Forum
Ich habe ein Frage zu einem kleinen Programm. Es geht darum im 
Hauptprogramm die Variable "nummer" zu ändern und im Switch als Dualzahl 
für ne 7 Segmentanzeige auf Portd ausgibt.
Das ganze würde natürlich auch einfacher ohne Switch gehen aber ich will 
das so machen um das ganze später noch was anderes zu machen.

Beim kompilieren gibt es aber eine Fehlermeldung und ne Warnung:

Error
expected identifier or '(' before 'switch'

Warning
return type defaults to 'int' [enabled by default]

Was kann ich tun, damit es keine Fehler gibt?

Code:
1
/*
2
 * ATmega8_7seg.c
3
 *
4
 * Created: 15.12.2013 20:44:39
5
 *  Author: Valentin
6
 */ 
7
8
#include <avr/io.h>
9
10
#define F_CPU 8000000UL        // 8 MHz
11
#include <util/delay.h>
12
13
14
//************Programm************
15
16
main(void){              // Hauptprogramm
17
    DDRD = 0xFF;         // Variabeln und Outputs anlegen
18
    unsigned char nummer;
19
    while(1){            // Endlosschleife
20
    nummer=0;
21
    nummer++;
22
    _delay_ms(1000);
23
    if(nummer>9)
24
    {
25
    nummer=0;
26
    }
27
      
28
  }                      // Ende von while(1)
29
}                        // Ende von main(void)
30
31
32
//************Funktionen************
33
34
switch (nummer)
35
{
36
case 0: PORTD=0b00111111;    break;
37
case 1: PORTD=0b00000110;    break; 
38
case 2: PORTD=0b01011011;    break; 
39
case 3: PORTD=0b01001111;    break;
40
case 4: PORTD=0b01100110;    break;
41
case 5: PORTD=0b01101101;    break;
42
case 6: PORTD=0b01111101;    break;
43
case 7: PORTD=0b00000111;    break;
44
case 8: PORTD=0b01111111;    break;
45
case 9: PORTD=0b01101111;    break;
46
}

Vielen Dank für Lösungsmöglichkeiten.
Valentin

von Yalu X. (yalu) (Moderator)


Lesenswert?

Die Switch-Anweisung steht außerhalb einer Funktion.

Die sollte wahrscheinlich am Ende der While-Schleife stehen.

von Martin (Gast)


Lesenswert?

Ich denke "switch" ist ein reserviertes Keyword und kann nicht als 
Funktionsname verwendet werden. Nimm mal nen anderen Namen. In die 
Funktion muss dann natürlich wieder eine Switch-Anweisung.

Achja, die Funktion sollte auch aufgerufen werden.

Grüße,
Martin

von Valentin S. (lochrasterer)


Lesenswert?

Ok jetzt funktionierts.
Vielen dank.
Valenitn

von Martin (Gast)


Lesenswert?

Das hier macht wohl auch nicht ganz was es soll?

nummer=0;
nummer++;

Martin

von Roland .. (rowland)


Lesenswert?

Valentin S. schrieb:
> PORTD=0b00111111;

Seit wann funktioniert die Binärschreibweise in C? Oder sind da irgendwo 
256 Makros definiert?

von petar (Gast)


Lesenswert?

Roland ... schrieb:
> Valentin S. schrieb:
>> PORTD=0b00111111;
> Seit wann funktioniert die Binärschreibweise in C? Oder sind da irgendwo
> 256 Makros definiert?
Das kann der GCC, Compiler-portabel ist er damit nicht. Aber hier im 
Forum gab es mal Makros, die einem diese Funktion auch für nicht 
GCC-Compiler zur Verfügung stellen.

von Dr. Sommer (Gast)


Lesenswert?

Roland ... schrieb:
> Valentin S. schrieb:
>> PORTD=0b00111111;
>
> Seit wann funktioniert die Binärschreibweise in C? Oder sind da irgendwo
> 256 Makros definiert?
In GCC geht das, ist aber nicht Standard...

von Roland .. (rowland)


Lesenswert?

Ah, okay. Ging das schon immer, oder wurde das erst in den letzen Jahren 
hizugefügt?

von Yalu X. (yalu) (Moderator)


Lesenswert?

Roland ... schrieb:
> Ah, okay. Ging das schon immer, oder wurde das erst in den letzen Jahren
> hizugefügt?

Letzteres. Die Erweiterung kam offiziell mit GCC 4.3.0 (März 2008). M.W. 
gab es das aber schon voher als Patch für in WinAVR.

von Roland .. (rowland)


Lesenswert?

Okay, danke.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.