mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik XC8 Bug/Fehler?


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Danish B. (danishbelal)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe ein komisches Problem mit dem XC8.
int main()
{
   [...]
   return 0;
}


Fehlermeldung:
main.c:23: error: (291) K&R identifier "main" not an argument
main.c:23: error: (314) ";" expected
main.c:24: error: (315) "{" expected
[...]
main.c:56: error: (204) void function can't return a value

Das Handbuch sagt zu Fehler 291 folgendes:
This identifier that has appeared in a K&R style argument declarator is not listed inside 
the parentheses after the function name, for example:
int process(input)
int unput;        /* oops -- that should be int input; */
{
}

Das ganze tritt auch mit einer (!) anderen Funktion auf. Diese ist 
allerdings (im Gegensatz zu main()) in einer Header Datei deklariert. 
Und ja, die Deklaration stimmt mit der Definition überein.

Ich hab schon probiert statt 'int main()' 'int main(void)' zu schreiben; 
allerdings ohne Erfolg.

Was geht hier gerade schief?
Sitzt der Fehler vor dem Bildschirm?


Handbuch: http://ww1.microchip.com/downloads/en/DeviceDoc/52053B.pdf
(Siehe Seite 399)

Autor: Richard (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Was sagt der Compiler, wenn du
void main(void)
benutzt?

Autor: Jim M. (turboj)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Kann es sein das main auf dem µC irgendwo als
void main();

definiert ist?

Außerdem ist das C89 und kein K&R C.

K&R C sähe so aus:
main()
{
/*  */
  return(0);
}

Und nein, da fehlt nix. Es wäre aber extrem unüblich für einen auf 
derzeitiger Hardware lauffähigen Compiler den Source Code per default in 
K&R C zu übersetzen.


Kommen noch andere Fehler? Denn das sieht nach einem Folgefehler, 
vergessener Klammer/Semikolon o.ä. aus.

: Bearbeitet durch User
Autor: Danish B. (danishbelal)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jim M. schrieb:
> Kommen noch andere Fehler? Denn das sieht nach einem Folgefehler,
> vergessener Klammer/Semikolon o.ä. aus.

Hab noch ein bisschen rumprobiert.

Es gab weiter unten in der Listen noch einen Fehler. Tatsächlich hat in 
einer Header-Datei am Ende eines langen Prototypen ein Semikolon 
gefehlt.
(Mal ein gutes Beispiel, wie irreführend Compiler Fehlermeldungen sein 
können).

Und ich dachte ich hätte das schonmal erfolgreich kompiliert :(.

Danke!

Autor: PICschlumpf (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
XC8 hat keine Feler!

XC8 ist das Beste seit der Erfindung von geschnitten Brot.

Autor: Danish B. (danishbelal)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
PICschlumpf schrieb:
> XC8 ist das Beste seit der Erfindung von geschnitten Brot.

Genau das denke ich mir auch immer 1!11

:)

Autor: Rufus Τ. F. (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danish B. schrieb:
> main.c:23: error: (291) K&R identifier "main" not an argument

Was steht in Deinem Code vor der Zeile 23?

Autor: Danish B. (danishbelal)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rufus Τ. F. schrieb:
> Danish B. schrieb:
>> main.c:23: error: (291) K&R identifier "main" not an argument
>
> Was steht in Deinem Code vor der Zeile 23?

Nichts, bzw. 'nur' eine Reihe von Includes.

In einem der Header hat ein Semikolon gefehlt, dass war der (dumme) 
Fehler.

Autor: Rufus Τ. F. (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danish B. schrieb:
> Nichts, bzw. 'nur' eine Reihe von Includes.

...

> In einem der Header hat ein Semikolon gefehlt

Na also.


Erste Regel beim Verstehen von unverständlichen Compilerfehlermeldungen: 
Immer vor dem Auftreten des Fehlers nachsehen.

Autor: yupp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danish B. schrieb:
> Es gab weiter unten in der Listen noch einen Fehler. Tatsächlich hat in
> einer Header-Datei am Ende eines langen Prototypen ein Semikolon
> gefehlt.
> (Mal ein gutes Beispiel, wie irreführend Compiler Fehlermeldungen sein
> können).

Muhaha, mein Lieblingsfehler.

Einen Strichpunkt vergessen, und ein wahlich gigantischer Wald aus 
irreführenden Meldungen an den unmöglichsten Stellen erscheint.

Irreführend ist die Meldung aus Sicht des Compilers aber eigentlich 
nicht. Du musst dir mal ansehen, was der Compiler WIRKLICH zu sehen 
bekommt - also den Output des Präprozessors. Dann wird klar, warum das 
so ist.

Für den XC8 muss man glaub ich dazu eine Compileroption angeben:
http://www.microchip.com/forums/m880255.aspx

Es ist sehr empfehlenswert, sich mal anzusehen, was der arme Compiler 
wiklich vorgeworfen bekommt.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.