Funktion und return (EXIT_FAILURE)

Diskutiere Funktion und return (EXIT_FAILURE) im C/C++ Forum im Bereich Programmieren unter Linux/Unix; 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...

  1. Yellow

    Yellow Doppel-As

    Dabei seit:
    04.06.2007
    Beiträge:
    149
    Zustimmungen:
    0
    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
     
  2. Anzeige

    Anzeige

    Wenn du mehr über Linux erfahren möchtest, dann solltest du dir mal folgende Shellkommandos anschauen.


    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. rikola

    rikola Foren Gott

    Dabei seit:
    23.08.2005
    Beiträge:
    2.133
    Zustimmungen:
    0
    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.
     
  4. #3 Yellow, 02.07.2007
    Zuletzt bearbeitet: 02.07.2007
    Yellow

    Yellow Doppel-As

    Dabei seit:
    04.06.2007
    Beiträge:
    149
    Zustimmungen:
    0
    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) {
    
     
  5. #4 matzeed7, 02.07.2007
    matzeed7

    matzeed7 Mitglied

    Dabei seit:
    28.10.2006
    Beiträge:
    38
    Zustimmungen:
    0
    vielleicht das return durch exit(-1); ersetzen um das prog zu beenden!
     
  6. #5 darktrym, 02.07.2007
    Zuletzt bearbeitet: 02.07.2007
    darktrym

    darktrym Grünschnabel

    Dabei seit:
    23.01.2007
    Beiträge:
    8
    Zustimmungen:
    0
    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.
     
  7. #6 root1992, 02.07.2007
    root1992

    root1992 von IT-Lehrern besessen

    Dabei seit:
    02.01.2006
    Beiträge:
    1.138
    Zustimmungen:
    0
    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 ???
     
  8. Yellow

    Yellow Doppel-As

    Dabei seit:
    04.06.2007
    Beiträge:
    149
    Zustimmungen:
    0
    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
     
Thema:

Funktion und return (EXIT_FAILURE)

Die Seite wird geladen...

Funktion und return (EXIT_FAILURE) - Ähnliche Themen

  1. PHP funktioniert, nur Web-Aufrufe mit Optionen nicht.

    PHP funktioniert, nur Web-Aufrufe mit Optionen nicht.: Hallo zusammen, für eines meiner Open-Source Projekte wollte ich, zusätzlich zu Debian, noch CentOS8 als Alternative anbieten. Leider gestaltete...
  2. Routing funktioniert nur für eine IP

    Routing funktioniert nur für eine IP: Hallo zusammen, ich habe ein sehr komisches Verhalten und kann mir das nicht erklären. Ich habe ein /28 Netz. Darin befinden sich Linuxsysteme...
  3. Warum funktioniert mein BASH - Dialog nicht ?

    Warum funktioniert mein BASH - Dialog nicht ?: Hallo, ich habe hier eine kleine Funktion in BASH geschrieben, die den Benutzer nach einer Lokalen IP Adresse Fragt, und diese dann angpingt....
  4. Xmoto Taste gedrückt halten funktioniert nicht unter Debian 10

    Xmoto Taste gedrückt halten funktioniert nicht unter Debian 10: Hab mir vor 2 Tagen Debian 10 installiert. Dazu wie immer auch das Spiel Xmoto, dessen Spieldaten ich von Debian 9 übertragen habe (und davor...
  5. Blender 2.80 mit neuer Oberfläche und neuen Funktionen

    Blender 2.80 mit neuer Oberfläche und neuen Funktionen: Nach fast zweijähriger Entwicklungszeit ist die freie 3D-Rendering-Software Blender in einer neuen Version erschienen. Blender 2.80 kommt unter...
  1. Diese Seite verwendet Cookies um Inhalte zu personalisieren. Außerdem werden auch Cookies von Diensten Dritter gesetzt. Mit dem weiteren Aufenthalt akzeptierst du diesen Einsatz von Cookies.
    Information ausblenden