Benötige Hilfe bei C

Gast #2691507
Lesenswert?

Rene3233 schrieb:
> {                      <========= In Dieser zeile ist der Fehler

Nö.

Gewöhne dich daran, daß bei C-Compilern die Fehlermeldung in 99% aller 
Fälle nicht auf den eigentlichen Fehler hinweist, sondern selbiger sich 
ein paar Zeilen davor befindet.

Ich vermute mal, daß du bei der Formulierung der Interruptprozedur nen 
Fehler gemacht hast.

W.S.
Gast #2692897
Lesenswert?

Rene3233 schrieb:
> Danke es geht wieder das wuste ich nicht das man nach so welchen
> kommentaren immer eine zeile platz lassen muss.

Muss man nicht, wenn man die letzen beiden Zeichen in deinen Kommentaren 
weglässt. Denn in deinem Kommentar ist das vermeintliche 
Abschlusszeichen "\\" Quatsch!
"\" wird von jedem Compiler als Zeilenfortsetzung verstanden und damit 
gehört der ISR-Aufruf auch noch zum Kommentar. Jetzt steht die darauf 
folgende öffnende Klammer alleine rum.
Der Kommentar mit "//" hat nun mal kein definiertes Ende-Zeichen. Du 
könntest aber nochmals "//" verwenden, oder auch (fast) jedes andere mit 
Ausnahme von "\". Fast: die Kombination "/*" am Ende wäre natürlich auch 
falsch!
1
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\\
2
// Overflow Interrupt Time                              \\
3
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\\
4
//                                                      ^^ die gehören weg!
5
ISR ( TIMER0_OVF_vect ) // Timer0 overflow Interrupt
6
{
7
PORTD ^= (1 << PD1);
8
}

Wenn du unbedingt optische Rahmen benötigst, dann mach's doch so:
1
/*******************************************************/
2
/* Overflow Interrupt Time                             */
3
/*******************************************************/
4
ISR ( TIMER0_OVF_vect )       // Timer0 overflow Interrupt
5
...
Gast #2692915
Lesenswert?

und ich dachte "//" ist nur zeilenbezogen ?! wie kann dann der interrupt 
da hinein geraten. man muss doch ein "//" nicht beenden, diese 
kommentarfunktion dient doch extra dazu NUR eine zeile zu 
kommentieren... hingegen "/* */" mehrere zeilen kommentieren kann
#2692924
Lesenswert?

busche schrieb:
> und ich dachte "//" ist nur zeilenbezogen ?!

Das Problem ist im eigentlichen Sinne nicht das // sondern das \ am 
Zeilenede.

Eine Zeile im Editor, die mit einem \ gefolgt von einem Zeilendezeichen 
(Carriage Return Linefeed) aufhört, wird vom Präprozessor als 
Zeilfortsetzungszeichen gewertet.

D.h. Du möchtest gerne aus irgendwelchen Gründen eine logische Zeile in 
mehrere physische Zeilen auftrennen, möchtest aber haben, das der 
COmpiler das als eine einzige Zeile ansieht.

Aus
1
   irgendwas \
2
   irgendwas_anderes

macht der Präprozessor
1
   irgendwas irgendwas_anderes

indem er den COntuniation Character auswertet und wie befohlen die 
Zeilen zusammengezogen hat.

Bei dir ist das eben
1
  //   irgendwas \
2
  irgendwas_anderes

was vom Präprozessor zu
1
  // irgendwas irgendwas_anderes
zusammengezogen wird.

Und damit findet sich das 'irgendwa_anderes' plötzlich im Kommentar 
wieder.

> wie kann dann der interrupt
> da hinein geraten.

Das passiert hauptsächlich dadurch, das der Programmierer kein C-Buch 
gelesen hat. Denn da würden solche Sachen (und noch viele mehr) nämlich 
drinn stehen. Unter anderem auch die Reihenfolge, in der der 
Präprozessor bestimmte Dinge auswertet und Codemodifikationen vornimmt

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren