Funktion und return (EXIT_FAILURE)

Dieses Thema im Forum "C/C++" wurde erstellt von Yellow, 02.07.2007.

  1. Yellow

    Yellow Doppel-As

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

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    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
    Ort:
    Bad Arolsen
    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. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  8. #6 root1992, 02.07.2007
    root1992

    root1992 von IT-Lehrern besessen

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

    Yellow Doppel-As

    Dabei seit:
    04.06.2007
    Beiträge:
    149
    Zustimmungen:
    0
    Ort:
    Bad Arolsen
    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. CentOS 7.2: Mailversand funktioniert obwohl nicht definiert

    CentOS 7.2: Mailversand funktioniert obwohl nicht definiert: Hallo Habe CentOS 7.2 installiert/konfiguriert. Testweise habe ich eine mail versendet: mail -s "test mail" email@adresse.de May 25 15:45:04...
  2. In eigener Sache: Neue, stark verbesserte Suchfunktion

    In eigener Sache: Neue, stark verbesserte Suchfunktion: Pro-Linux läuft nun mit der erneuerten Version 1.5 des Content Management Systems NB3. Die wichtigste sichtbare Änderung ist die neue, auf der...
  3. Funktionssuche in C: Emacs oder Vim?

    Funktionssuche in C: Emacs oder Vim?: Hallo, ich muss mir häufig C-Projekte angucken, und dann suche ich bspw., wo eine aufgerufene Funkion definiert oder deklariert (Header) wird....
  4. FAI 5 mit Autodiscover-Funktion

    FAI 5 mit Autodiscover-Funktion: Die Entwickler des Softwarewerkzeugs zur vollautomatischen Installation von Betriebssystemen und Anwendungen haben mit FAI 5 eine neue Version des...
  5. Suse Linux Enterprise 11 SP4 verbessert Sicherheitsfunktionen

    Suse Linux Enterprise 11 SP4 verbessert Sicherheitsfunktionen: Suse hat das mittlerweile vierte Service Pack für Suse Linux Enterprise 11 veröffentlicht. Die neue Ausgabe liefert erweiterte...