Funktion und return (EXIT_FAILURE)

Yellow

Yellow

Doppel-As
Hi Community!

Wie der Name schon des Threads sagt, habe ich eine Frage zu Funktionen und der Rückgabe-Funktion.

Ich schreibe unter Linux und Compiliere mit GCC.

Wenn ich ein Programm schreibe und in einer Funktion s.Bsp.

Code:
/* Einfaches Rechnen */
#include <stdio.h>
#include <stdlib.h>

void plus(int a) {
   if ( NULL==a )  {
      a+=10;
      printf( "%i\n" , a );
   }
   else
   {
      perror(NULL);
      return (EXIT_FAILURE); // Ohne Klammern auch das Problem!
   }
}

int main(int argc, char **argv) {
   if ( argc < 2 ) {
      perror(NULL);
      return (EXIT_FAILURE);
   }
   else
   {
      plus(*++argv);
   }
return (EXIT_SUCCESS);
}

So das Problem ist bei mir das wenn ich sowas Compiliere, dann sagt der mit sowas wie "Error: Return Value in void Funtion plus". Also so ungefähr.

Bin gerade im I-Cafe und habe die Fehlermeldung nicht vor Augen. Dennoch sagt der mir das immer wenn ich in einer Funktion "return (EXIT_FAILURE)" schreibe!

Woran liegt das? Benutze den Compiler mit mit folgendem Syntax:

gcc -Wall -o source source.c

Hoffe ich habe mein Problem Verständlich geschildert? :)

Yellow
 
Ja, das Problem ist klar, vor allem mit dem Codebeispiel. Du deklarierst eine Funktion
Code:
void plus(int a);
das void sagt dem Kompiler, dass diese Funktion nichts zurueckgibt. Das heisst, bestenfalls duerfte in ihr ein 'return;' ohne Argument vorkommen, oder gar kein return.

Du benutzt die Zeile 'return (EXIT_FAILURE);' womit dies Funktion einen Zahlenwert (1, definiert in stdlib.h) zurueckgibt. Damit stimmen Deklaration und Verhalten der Funktion nicht ueberein, weswegen der Kompiler sich beschwert. Lass das 'return' innerhalb der Funktion 'plus' ganz weg, dann geht auch die Kompilermeldung weg.
 
Lass das 'return' innerhalb der Funktion 'plus' ganz weg, dann geht auch die Kompilermeldung weg.

Ja aber wenn ich das weglasse, dann läuft doch das Programm weiter. Aber es soll doch da dann sofort aussteigen! Kann ich denn die Funktion dafür anders Declarieren?

Bin halt noch new in dem Gebiet ;)

-----------------------------
EDIT: Also wenn ich z.B. die Funktion so deklariere, dann sollte es doch gehen oder?
Code:
int plus(int a) {
 
Zuletzt bearbeitet:
vielleicht das return durch exit(-1); ersetzen um das prog zu beenden!
 
Wieso willst du einer Funktion ohne Rückgabe einen Wert zuweisen?

Versteh dein Programm nicht!
1. argv ist einer Zeichenkette und die Funktionsrumpf passt dazu nicht. Der Typ für a(int) muss vorher erst umgewandelt werden.
/* Einfaches Rechnen */
#include <stdio.h>
#include <stdlib.h>

void plus(int a) {
/* if ( NULL==a ) {*/
a+=10;
printf( "%i\n" , a );
/* } kann nicht auftreten, da im Hauptprogramm schon überprüft wurde
else
{
perror(NULL);
exit (EXIT_FAILURE); // Ohne Klammern auch das Problem!
}*/
}

int main(int argc, char **argv) {
if ( argc < 2 ) {
perror(NULL);
return (EXIT_FAILURE);
}
else
{
plus(atoi(*++argv));
}
return (EXIT_SUCCESS);
}
 
Zuletzt bearbeitet:
Du kannst entweder:
void plus(int a){
return:
}
oder
int plus(int a){
return EXIT_SUCCESS;
}
so wie ich das gesehen hab. Weil nen returnwert in ner void Funktion, der ein int (?) ist ???
 
Sry Leute das ich erst so spät anworte. Aber ich habe kein Internet und gehe dann immer ins I-Cafe.

Darktrym: Es handelt sich dabei nur um ein kleines Beispiel für meine Frage. Soll nicht wirklich ein Gut programmiertes Proggy sein ;)

Matzied7: Ja das mit dem exit() ist mir auch bekannt. Doch es war einfach mal reine neugier warum das mit dem "return" nicht funktioniert!

Ich habe mich in meinem Lehrbuch noch etwas weiter durch gearbeitet und habe dann dort auch noch genauer erklärt bekommen warum es nicht funktioniert und das ich dann doch die Funktion exit() verwenden sollte. Ich danke euch für eure Hilfe.

Ich denke ich habe es nun geschnallt ;)

Yellow
 

Ähnliche Themen

Unix Webserver mit HTML Seite erstellen

C HTTP request

dynamische Speicherreservierung

[PHP] Autologin-Funktion

kann ich diesen c-code ausführen, wenn ja wie?

Zurück
Oben