Aufgabe 1 für Anfänger


Die einzige Warnung die ich bei deinem Code kriege ist, dass der Rückgabewert von
main() nicht vom Typ int ist. Wo hast du dein Programm denn compiliert?


ich hab nun remove_element(void) geschrieben und siehe da: DIE WARNINGS SIND WEG!

danke!


na dann… aber sehr komisch, das kann eigentlich nur eine compiler Eigenheit sein…


Streng genommen sind Funktionsprototypen der Form
int funktion(); bzw. die Funktionsdefinitionen die dazugehören kein ANSI-C.
Funktionen die keine Parameter übergeben bekommen, sollten deshalb so
deklariert/definiert werden:

typ funktion(void);

Der gcc schluckt mit der -ansi -pedantic Option trotzdem beide Varianten (meine Version jedenfalls). Der ein oder andere Compiler ist da vielleicht strenger.


wobei ich glaube dass in C99 das mit () == (void) eingeführt wurde, ich kann mich aber irren :confused: Würde zumindest erklären warum sowohl der GCC als auch das Visual Studio es klaglos schlucken.


Scheint so zu sein, habe das da gefunden:

Also muss nach C99 der Typ explizit angegeben werden, wobei er davor auch weggelassen werden konnte?


^^ o0 das ist ja noch viel schlimmer als ich dachte … :wink: Ich wüsste gerne an welchen Standard wir uns jetzt halten sollen :confused: Stranges Zeuch ^

Ich glaub vorher wenn du func () geschrieben hast war das gleich func (…) also beliebig viele parameter … oder so :slight_smile:


Ich befürchte fast, wenn man wirklich will, kann man das noch beliebig verkomplizieren…

Die cip Rechner antworten auf „gcc -v“ Version 3.3.5

Naja und zur Kombination Version 3.3 und C99 findet sich das hier:

http://gcc.gnu.org/gcc-3.3/c99status.html

Also mir reicht völlig es wenn der compiler mit den ganzen -pedantic optionen nicht meckert…


nachdem viele Varianten von C - vor allem im embedded-Bereich - von
ANSI-C (also C90) abgeleitet sind, haben wir bisher auf C99 verzichtet.
Die “Verbesserungen” von C99 machen eigentlich auch keinen
essentiellen Unterschied - jedenfalls wird die Sprache damit nicht wirklich
besser (von den impliziten Funktionsdeklarationen, die sie da abgeschafft haben,
vielleicht mal abgesehen).
Und nachdem man ja in der Praxis doch staendig ueber Compiler stolpert, die
das alles ganz laessig handhaben, hat man ja nicht wirklich was davon.
Man muss die C90-Eigenschaften ja doch kennen.

Fazit: wir machen C90 (und wenn jemand mal einen Kommentar mit // beginnt,
dann ist’s auch kein Unglueck :slight_smile: )


queue.c:51: warning: ISO C89 forbids mixed declarations and code

is das dann erlaubt oder nicht?

P.S. da steht nur int ret = head->wert und ich gebe am ende ret zurück…


Das Problem hier ist glaube ich eher, dass du eine neue Variable mitten in einer Funktion deklarieren willst. Also z.B. sowas hier:

int main(int argc, char *argv[]) {
    int a = 3;
    printf("%d\n", a);
    int b = a;
    return b;
}

Das funktioniert nicht, weil das eben in ANSI-C verboten ist. Du musst deine Variablen alle am Beginn der Funktion deklarieren.


Hi,
ich hab das gleiche Problem wie MuMu mit der main-Methode.

Der Compiler gibt mir zurück: return type of ‘main’ is not int

Allerdings hab ich schon remove_element(void) geschrieben


ehm… wenn deine main-methode int zurückgibt, dann sollte am ende schon etwas wie

 return 0; 

stehen, oder hast du das bereits ?


Das ist es ja, ich hab

[color=red]void main(void){

}[/color]


[m]int main(void)[/m] schon mal probiert? Vielleicht besteht dein Compiler halt einfach auf einem Rückgabewert…?


dann würd ich entweder

 int main() { ... return 0; } 

schreiben …

oder

 void main () { ... } 

keine ahnung, mehr weiss ich auch nicht ^^ … was sagen die anderen ? :slight_smile:


Na warum lest ihr nicht einfach die Fehlermeldung.
“The return type of main is NOT int”.
Der Rückgabetyo der Mainfunktion ist NICHT int".

Wenn jetzt deine main so aussieht:

void main() { }
WAS ist dann falsch?
Ja genau, remove_element!

int main() { return 0; }}

Einfach mal die Fehlermeldung lesen. Gcc sagt schon was falsch ist.


Wow, drei Antworten innerhalb von Minuten… Die Frau im Informatiker-Forum… :smiley:


Wenn ich

[color=red]int main(void){
… return 0;
}[/color]

und das dann compilier, dann ist die Fehlermeldung den ganzen Bildschirm lang…


vll weil er die funktion dann compiliert und diese vll fehlerhaft ist ? … könnte ja sein, oder?