Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » no return statement in function returning non-void

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
23.11.2011, 17:20 Uhr
ao

(Operator)


Argh, ich bin gerade so richtig schön in die Falle getappt. Hatte sowas hier geschrieben


C++:
int bla ()
{
    // irgendwas ausgewertet
    // und raus aus der Funktion ohne return ergebnis
}



Natürlich hat der GCC mir eine Warnung geschickt, aber weil ich grad was größeres baue, was noch nicht aufgeräumt ist und einige Warnungen produziert, ist mir die eine nicht aufgefallen.

Das Fehlerbild war ein saublödes, und erst nach längerem Platzieren von Trace-Meldungen bin ich endlich drauf gekommen.

Was ich jetzt gerne wüsste: Warum ist ein fehlendes return-Statement kein Fehler? Was haben sich die C++-Erfinder dabei gedacht?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
23.11.2011, 22:33 Uhr
Hans
Library Walker
(Operator)


Hi,

ich bin mir zwar nicht sicher, aber da C/C++ ja nicht zwischen Funktionen und Prozeduren unterscheiden, wie es in anderen Sprachen der Fall ist, kann eine Funktion eben auch als Prozedur betrachtet werden. Und Prozeduren liefern im allgemeinen nichts zurück. Falls sie das doch tun sollen, dann muss man in Pascal z.B. mit "call by reference" arbeiten, also etwa:

Code:
procedure do_something(var x:integer; y:integer)
begin
end;


Bei dieser Prozedur würde in x ein Wert zurück gegeben, in y aber nicht. In C(++) sähe das so aus:

C++:
do_something(int *x, int y)
{}



Das ist jedendfalls eine mögliche Erklärung, die mir dazu einfällt.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
23.11.2011, 23:16 Uhr
ao

(Operator)


Ich glaube, wir missverstehen uns. Ich möchte wissen, was der Grund dafür ist, das das hier


C++:
int bla ()
{
    int ergebnis = irgendeine_Auswertung;

    // hier fehlt "return ergebnis;"
}



beim Kompilieren keinen Fehler wirft, sondern nur eine Warnung. Eigentlich ist doch der Widerspruch zwischen dem Kopf (int bla ()) und der fehlenden Rückgabe klar erkennbar.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
23.11.2011, 23:24 Uhr
Hans
Library Walker
(Operator)


jetzt, wo Du mich mit der Nase drauf stösst...

Was sagt denn der Standard dazu?
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
23.11.2011, 23:41 Uhr
Hans
Library Walker
(Operator)


Hab's jetzt gerade mal mit dem Programm unten gestestet. Da liefert mir der Open Watcom die Fehlermeldung:

Code:
Error! E003: col(1) missing return value



Also keine Ahnung, warum der gcc da nur 'ne Warnung ausgibt.

Hans



C++:
#include <iostream>

using namespace std;

int bla();

int main()
{
  int x;
  x = bla();
  cout << x << endl;
  
  return 0;
}
  
int bla ()
{
    int ergebnis = 5*7;

    // hier fehlt "return ergebnis;"
}




P.S. interessant ist übrigens: Wenn ich das in C schreibe, (stdio.h anstelle iostream, printf anstelle von cout, kein using namespace) gibt das Programm 35 aus.
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 23.11.2011 um 23:46 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
24.11.2011, 07:40 Uhr
Tommix



'Morgen,
das ist ein Relikt aus frühesten C-Zeiten. Void war in den ersten Sprachdefinitionen nicht vorgesehen (außer in der Form void*). Man nahm int und ließ den Rückgabewert undefiniert. Ich habe irgenwo ein altes Buch mit einer Zeittafel zum Thema C, kann heue Abend noch mal genauer nachschlagen.
- Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
25.11.2011, 08:00 Uhr
Tommix



Also,

Zitat:

Unterschiede von X/OPEN-C gegenüber Ritchie-C

1. Neue Datentypen
... enum ... void ... unsigned char ...


soll 1985 passiert sein.

Gruß, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: