Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » braucht man kein return in main() ??

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 < [ 2 ]
000
31.07.2004, 13:52 Uhr
RedEagle



habe im Internet folgendes gefunden:


C++:
int main()
{
  return 0; // ist laut C++-ISO-Standard von 1998 nicht mehr notwendig, wird daher in Folge weggelassen.
}



stimmt das so??

wen nja, warum ist den

C++:
void main()
{

}


kein standart??
--
MFG RedEagle
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
31.07.2004, 14:44 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


argh komm du jetzt auch nicht mit dieser Pablo-Frage...

also int-returnwert weils der standard so vorsieht deswegen eben nicht void...
das return am ende kannst du weglassen weil der standard definiert wenn du es nicht schreibst das der compiler es impliziet für dich tut...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
31.07.2004, 14:52 Uhr
Pablo
Supertux
(Operator)


Man braucht Tatsächlich kein return in main, sollte man aber es tun.

void main ist kein Standard, nach dem warum musst du an den Herren des Standards fragen. Meine Vermutung ist folgende:

void bedeutet, dass kein Wert zurückgeliefert wird. In den Unix Welt arbeitet man sehr gerne mit der Shell und vor allem die bash, sh und andere Skripte (wie configure) müssen wissen, ob bestimmte Programme mit oder ohne Fehler beendet haben. Dafür machst du in main entweder return 0 oder return 1 oder was weiß ich. Wenn aber void main hast, dann gibt es keinen Wert, der zurückgeliefrt wird. Außerdem ist int main kürzer zu schreiben als void main.

Noch was, was für ein Avatar oder ein Sch... Server hast du, dass man über 4 Minuten mit DSL braucht, um die Seite anzuzeigen?
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 31.07.2004 um 14:54 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
31.07.2004, 14:54 Uhr
0xdeadbeef
Gott
(Operator)


In C++ wird von main per default 0 zurückgegeben, dazu muss main aber immer noch int sein.

Wenn main void ist, legt main keinen Rückgabewert auf den Stack - die Shell will aber einen auslesen. Programme haben nun mal einen Rückgabewert, und deswegen macht void main nicht den geringsten Sinn.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
31.07.2004, 16:22 Uhr
RedEagle




Zitat:

Pablo:
Noch was, was für ein Avatar oder ein Sch... Server hast du, dass man über 4 Minuten mit DSL braucht, um die Seite anzuzeigen?



wenn du mich meinst:
1. was für ein Avatar??
2. Ich habe kein server
3. oder was meinst du??

kommt es unter windows auch for, das Programme eine return-wert brauchen (also das dann damit weitergearbeitet wird)??

auf jeden fall danke.
--
MFG RedEagle
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
31.07.2004, 17:15 Uhr
Tommix



In Ergänzung zu den bereits gegebenen Bemerkungen möchte ich noch hinzufügen, dass der Datentyp void erst mit X/OPEN-C eingeführt wurde (1984 ?) und in der ursprünglichen Sprache von 1972 gar nicht zur Verfügung stand.

- Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
31.07.2004, 18:37 Uhr
Hans
Library Walker
(Operator)


Stimmt. Da ist man aber auch grundsätzlich davon ausgegangen, das main() einen int-wert zurück gibt, ob eine Shell den nun verwendet hat, oder nicht. Und der Compiler ist da auch grundsätzlich davon ausgegangen, das eine Funktion int zurückliefert, auch wenn gar nix als Rückgabe angegeben war.
Wann void main(void) sinnvoll ist, ist zum Beispiel, wenn das Programm auf 'nem Mikrocontroller laufen soll. Da gibt es nämlich meist keine Shell, sondern das Programm läuft los, sobald das Gerät eingeschaltet wird, und wird beendet, wenn der Strom wieder abgestellt wird.

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
007
31.07.2004, 19:14 Uhr
0xdeadbeef
Gott
(Operator)


Wobei du dann aber in aller Regel die Startadresse in Assembler hinbasteln wirst, und dann hast du gar kein main. void main ist jedenfalls grober Unfug, schon weil ein strenger C- bzw. C++-Compiler dir das nicht abkauft.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
01.08.2004, 13:15 Uhr
Hans
Library Walker
(Operator)



Zitat von 0xdeadbeef:
Wobei du dann aber in aller Regel die Startadresse in Assembler hinbasteln wirst, und dann hast du gar kein main. void main ist jedenfalls grober Unfug, schon weil ein strenger C- bzw. C++-Compiler dir das nicht abkauft.

Hi Beefy,

nö, warum sollte ich die Staradresse in Assembler einsetzen, wenn der Compiler das auch kann?
Und dann erklär mir doch mal, warum Du auf die Rückgabe eines Wertes von main() auch bei Mikrocontrollern bestehst.
Wozu soll ein Programm, das auf einem µC läuft einen Rückgabewert definieren, wenn es gar keine Shell gibt, die es aufgerufen hat, und den Wert irgendwie verarbeiten könnte. Und wenn das Programm eh das einzige ist, das dort läuft, meisst in einer Endlosschleife, macht es erst recht keinen Sinn, das ein Rückgabewert definiert wird. An wen oder was sollte der denn auch gegeben werden? Und Compiler, die µC-Code erzeugen, sind auch so eingestellt, das sie void main(void) akzeptieren.
Ein µC-Programm sieht doch meisst so aus:


C++:
#include "defs.h"     // controllerspezifische deklarationen
                // evtl. weitere Deklarationen, oder Module zur Ansteuerung von
                // bestimmter Hardware

// Funktionsprototypen, soweit sie nicht in include-dateien ausgelagert sind

void main(void)
{
  // Variablen def.
  
  init();    // Ein paar initialisierungen; es können auch mehrere Funktionen sein

  while(1)
  {
    // hier wird das erledigt, wozu die Schaltung entwickelt wurde
  }

}  // von main

// weitere Funktionen...




Ein Praxisbeispiel dafür findest Du hier: Quellcodes und die zugehörige Doku als PDF. - Es geht darum, eine PC-Tastatur mit dem Controller abzufragen, damit man die Werte weiter verarbeiten kann.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 01.08.2004 um 13:17 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
01.08.2004, 13:40 Uhr
0xdeadbeef
Gott
(Operator)


Laut C- und C++-Standards ist main immer int. Per Definitionem. Wenn du void main benutzt, schreibst du weder C noch C++, darum gehts grad.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ 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: