Forum: Mikrocontroller und Digitale Elektronik XC8 Bug/Fehler?


von Danish B. (danishbelal)


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)

von Richard (Gast)


Lesenswert?

Was sagt der Compiler, wenn du
void main(void)
benutzt?

von Jim M. (turboj)


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.

: Bearbeitet durch User
von Danish B. (danishbelal)


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!

von PICschlumpf (Gast)


Lesenswert?

XC8 hat keine Feler!

XC8 ist das Beste seit der Erfindung von geschnitten Brot.

von Danish B. (danishbelal)


Lesenswert?

PICschlumpf schrieb:
> XC8 ist das Beste seit der Erfindung von geschnitten Brot.

Genau das denke ich mir auch immer 1!11

:)

von Rufus Τ. F. (rufus) Benutzerseite


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?

von Danish B. (danishbelal)


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.

von Rufus Τ. F. (rufus) Benutzerseite


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.

von yupp (Gast)


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.

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.