Du bist nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: OS X Entwicklerforum. Falls dies dein erster Besuch auf dieser Seite ist, lies bitte die Hilfe durch. Dort wird dir die Bedienung dieser Seite näher erläutert. Darüber hinaus solltest du dich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutze das Registrierungsformular, um dich zu registrieren oder informiere dich ausführlich über den Registrierungsvorgang. Falls du dich bereits zu einem früheren Zeitpunkt registriert hast, kannst du dich hier anmelden.

1

Samstag, 28. April 2012, 11:33

Anfängerfrage bezüglich main Methode

Hi Leute,


ich bin grad dabei C zu lernen und hab mir dazu auch schon so einige Literatur anegschafft.
Leider scheint es in C Fachbüchern so zu sein das jeder ein wenig sein eigenes Süppchen zu kochen scheint.


Folgendes :


Es wird ja fast immer HelloWorld als Bspl. angegeben.
So, da schreibt der eine nur

Quellcode

1
main ()
,
der andere

Quellcode

1
int main 

und wieder ein anderer schreibt

Quellcode

1
void main (void)
.


Dann schreibt der eine

Quellcode

1
return (0);
dazu und ein anderer nicht.
Ausserdem habe ich noch bei einem

Quellcode

1
getchar(); 
entdeckt worauf das Programm auf eine Tastatureingabe wartet.


Die Sache ist nun das ich das ganze Programm ohne int und ohne void aufschreiben kann.
Ausserdem funktioniert es auch ohne return und ohne getchar.


Meine Frage ist jetzt, was genau die Konventionen sind.Wie macht man es generell?
Da ich grade alles lerne, möchte ich schon das ich es mir auch so einpräge wie es aktuelle Konvention ist.


Danke

Beiträge: 9 635

Wohnort: Suedtirol (Italien)

Beruf: Software-Entwickler

  • Private Nachricht senden

2

Samstag, 28. April 2012, 11:57

Quellcode

1
int main( int argc, const char* argv[] )

Beiträge: 9 862

Wohnort: Klüngelshausen

Beruf: 1,5

Hobbys: Maulaffen feilhalten, Starkstrom

  • Private Nachricht senden

3

Samstag, 28. April 2012, 12:00

  1. main ist eine Funktion und keine Methode.
  2. In Kernighan & Ritchie C konnest Du den Rückgabetyp in der Funktionsdefinition und -deklaration weglassen. Der K&R-Compiler hat dann int als Rückgabetyp verwendet. Das ist aber veraltet und schlechter Stil.
  3. Die richtige Signatur lautet int main(int argc, char *argv[]) oder int main(int argc, const char *argv[]).
  4. Die runden Klammer in der Return-Anweisung sind überflüssig, weil return keine Funktion ist. Es reicht also return 0;
  5. Die Deklaration, Definition und der Aufruf einer C-Funktion enthält immer runde Klammern.
„Meine Komplikation hatte eine Komplikation.“

Apps programmieren für iPhone und iPad

4

Samstag, 28. April 2012, 12:44

Danke.

Der Prof hat in seinen aktuellen Vorlesungsunterlagen

Quellcode

1
int main () 

verwendet.

Vielleicht kommt die vollständigere Variante ja etwas später.

Beiträge: 9 862

Wohnort: Klüngelshausen

Beruf: 1,5

Hobbys: Maulaffen feilhalten, Starkstrom

  • Private Nachricht senden

5

Samstag, 28. April 2012, 13:11

Wenn Du die Kommandozeilenargumente in main() nicht verwenden willst, kannst Du sie in der Deklaration auch weglassen. Die C-Runtime ruft die Funktion trotzdem auf.
„Meine Komplikation hatte eine Komplikation.“

Apps programmieren für iPhone und iPad

Beiträge: 19 423

Wohnort: Köln

Beruf: Rechtsanwalt

Hobbys: FSK18

  • Private Nachricht senden

6

Montag, 30. April 2012, 09:35

Danke.

Der Prof hat in seinen aktuellen Vorlesungsunterlagen

Quellcode

1
int main () 

verwendet.

Vielleicht kommt die vollständigere Variante ja etwas später.

In C funktioniert ein Funktionsaufruf auch mit einer abweichenden Zahl von Parametern. Das liegt daran, dass der Aufrufer die Parameterübergabe und -bereinigung übernimmt. Der Compiler meckert zwar, wenn er das sieht, aber es funktioniert dennoch (By-Design, also nicht nur zufällig.) Da du kaum dein Programm gemeinsam mit dem Betriebssystem übersetzt, merkt es in diesem Falle nicht einmal der Compiler.
Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
verhindert man die Leaks, so verhindert man auch die Begrenzung auf 128 Abfragen

7

Montag, 30. April 2012, 09:53

ist "int main()" nicht sogar explizit im Standard? Ich bilde mir ein, sowas mal gehoert zu haben..
C++

Beiträge: 19 423

Wohnort: Köln

Beruf: Rechtsanwalt

Hobbys: FSK18

  • Private Nachricht senden

8

Montag, 30. April 2012, 10:20

ist "int main()" nicht sogar explizit im Standard? Ich bilde mir ein, sowas mal gehoert zu haben..

Ich meine auch, dass es da zwei Alternativen gibt. Aber letztlich spielt es in diesem Falle keine Rolle.
Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
verhindert man die Leaks, so verhindert man auch die Begrenzung auf 128 Abfragen

Social Bookmarks