Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

Re: internel compiler error Kategorie: Programmierung C (von kai - 1.09.2009 8:14)
Als Antwort auf Re: internel compiler error von Hanns - 1.09.2009 7:41
Ich nutze:
CC-Pro 32 Application Board
> > > > > > > > > Hallo,
> > > > > > > > >
> > > > > > > > > ich bekommen seit kurzem einen internel compiler error:
> > > > > > > > >
> > > > > > > > > Compiling Project DA_Steuerung
> > > > > > > > >
> > > > > > > > > C-Control Pro Compiler (C) 2009  Conrad Electronic
> > > > > > > > > Running Pass 1
> > > > > > > > > Running Pass 2
> > > > > > > > > internal compiler error Too much parameter entries at RET, in file codegen.cpp  line:3730
> > > > > > > > > one Error - compliation aborted.
> > > > > > > > > Writing Symbols - 7924 bytes..
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > Weiss jemand was schief läuft? Was kann ich tun? Der Code ist etwas zu gro� zum posten.
> > > > > > > > > Bei interesse kann ich den mal irgendwo hochladen.
> > > > > > > > >
> > > > > > > > > VG
> > > > > > > > > kai
> > > > > > > >
> > > > > > > > Wenn Probleme mit Compilerfehlern auftauchen, ist es immer wichtig zu wissen, welche Version
> > > > > > > > eingesetzt wird. Da in Zeile 3730 dieser Fehler nicht ausgelöst wird, kann ich mit hoher
> > > > > > > > Wahrscheinlichkeit sagen, das Du nicht die aktuelle Version 2.1 benutzt. Bitte die neueste
> > > > > > > > Version von C-Control Pro installieren, und nochmal testen.
> > > > > > > >
> > > > > > > > Gruss Peter
> > > > > > >
> > > > > > > Hallo Peter,
> > > > > > >
> > > > > > > doch, ich benutze die neuste Version. Und ich habe das Problem gefunden. Iher ein kleines Beispiel:
> > > > > > >
> > > > > > > void main (void)
> > > > > > > {
> > > > > > >   byte b;
> > > > > > >   b=abc(10);
> > > > > > > }
> > > > > > >
> > > > > > > byte abc(byte _a)
> > > > > > > {
> > > > > > >   //tu was sinnvolles
> > > > > > >
> > > > > > >   return xyz(_a);    <----- das verursacht den Fehler!!
> > > > > > > }
> > > > > > >
> > > > > > > byte xyz(byte _x)
> > > > > > > {
> > > > > > >   //macht auch noch was anderes
> > > > > > >   byte a;
> > > > > > >   a=_x+5;
> > > > > > >   return a;
> > > > > > > }
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > > Man kann das lösen indem man die Rückgabe von xyz in einer variablen zwischenspeichert und dann
> > > > > > > die Variable zuück gibt. Allerdings hätte ich gerne, um Platz zu sparen und die �bersichtlichkeit zu behalten,
> > > > > > > meine Schreibweise :-P Gibts ein Workaround? Oder bald ne neue Version ;-)?
> > > > > > >
> > > > > > > VG Kai
> > > > > >
> > > > > >
> > > > > > das Programm oben funktioniert doch so. Was ich gemacht habe, ist ein Array zu übergeben an xyz....
> > > > > >
> > > > > > void main (void)
> > > > > > {
> > > > > >   byte b;
> > > > > >   byte c[3] = {1,2,3};
> > > > > >   b=abc(c);
> > > > > > }
> > > > > >
> > > > > > byte abc(byte _a[])
> > > > > > {
> > > > > >   //tu was sinnvolles
> > > > > >
> > > > > >   return xyz(_a);   // <----- das verursacht den Fehler!!
> > > > > > }
> > > > > >
> > > > > > byte xyz(byte _x[])
> > > > > > {
> > > > > >   //macht auch noch was anderes
> > > > > >   byte a;
> > > > > >   a=5;
> > > > > >   return a;
> > > > > > }
> > > > > >
> > > > > >
> > > > > > so sieht das jetzt aus, damit der Fehler verursacht wird.
> > > > >
> > > > > abc erklärst DU als byte, Der return wert dagegen iste ein byte-Array .
> > > > > Könnte es daran liegen?
> > > > > Hanns
> > > >
> > > > Eigentlich ist das kein Array. Ich gebe in abc das Ergebnis aus xyz zurück. Und das ist nur ein Byte - kein
> > > > Array. Allerdings übergebe ich an xyz ein Array. Und genau das ist das Problem. Würde ich nur ein Byte
> > > > übergeben geht es.
> > > >
> > > > VG Kai
> > >
> > > ich verstehe trotzdem MAIN nicht:
> > >
> > > byte abc(byte _a[])
> > > {
> > > //tu was sinnvolles
> > >  return xyz(_a);   // <----- das verursacht den Fehler!!
> > > }

> > >
> > > -einmals schreibst Du "_a[]" und dann "_a": Was machst DU  mit _a[], und woher kommt _a?
> >
> >
> > abc ist eine funktion, so wie xyz auch. Ich rufe in main nur abc auf, welches wiederrum xyz aufruft. Und
> > abc und xyz geben dabei Werte zurück (aber je nur 1 Byte). d.h. abc erwartet das ein Array bein Aufruf
> > übergeben wird.
> >
> > byte abc(byte _a[])
> > {
> > }
> >
> >
> > Das selbe gilt für xyz. Und dort übergebe ich dann das Array -> xyz(_a);
> > In anderen C Programmierumgebungen funktioniert das auch so...
>
> Wahrscheinlich bin ich dämlich:
>
>  die funtktion "byte abc(byte _a[])" gibt ein byte zurück ( ist mir klar ), und erwartet
> ein byte_Array ( nämlich "_a" ).
> SOllte man daher auch schreiben können
> "byte abc(byte []  _a)"
>
> Du gibst zurück "return _a "  ( und das ist für mich immer noch das Array -
>  während ein "Byte" zurückgegeben weren sollte) ?!?
> "return byte[0]" oder "return byte[n]" würde für mich Sinn machen.
>
> Oder stehe ich jetzt völlig auf dem Schlauch
> ( ich weiÃ? ja, daÃ? bei mir langsam der ALtersstarrsinn beginnt)
> Hanns


Hallo Hans,

prinzipell hast Du recht. Allerding schreibe ich nirgens "return _a;" sondern "return xyz(_a);"

VG Kai

PS "byte abc(byte []  _a)" das kann man im C so nicht verwenden. nur "byte abc(byte _a[]);"


    Antwort schreiben


Antworten: