XC8 Bug/Fehler?

OP #5397388
Lesenswert?

Hallo,

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

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

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

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)
#5397404
Lesenswert?

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

definiert ist?

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

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

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.
OP #5397415
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!
Gast #5403052
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

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