Prozeduren bringen Fehlermeldungen

Schnelle objektorientierte, kompilierende Programmiersprache.
Schwimmfreak
Beiträge: 4
Registriert: Sa Apr 12, 2014 4:43 pm

Prozeduren bringen Fehlermeldungen

Beitrag von Schwimmfreak » Sa Apr 12, 2014 5:01 pm

Guten Tag Liebe Community,

Dies ist mein erster Post in diesem Forum deshalb verzeiht mir wenn er im falschen Bereich ist.

Ich arbeite mich momentan durch das Grundlagentutorial von C und bin beim Abschnitt Funktionen --> Prozeduren angelangt.

Code: Alles auswählen

#include <stdio.h>

  void SayHello( int howOften )
  {
    int i;
    for( i=0; i<howOften; i++ )
    {
      if( i == 5 )
        return;     // nach 5mal abrechen.

      printf( "Hello\n" );
    }
  }

Als ich folgenden Quellcode (im Tutorial angegeben) kompilieren wollte gibt er mir den Fehler aus

c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\..\..\..\libmingw32.a(main.o):main.c:(.text.startup+0xa7)||undefined reference to `WinMain@16'|
||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|

Kann mir jemand diesen Fehler erläutern und vielleicht auch beheben, sollte so wie ich das lese und da der Quellcode wegen dem Tutorial gar nicht falsch sein kann ja irgendwie intern an meinem PC hängen.

mfro
Beiträge: 346
Registriert: Mi Jan 16, 2013 4:58 pm

Re: Prozeduren bringen Fehlermeldungen

Beitrag von mfro » Sa Apr 12, 2014 5:11 pm

Schwimmfreak hat geschrieben: Kann mir jemand diesen Fehler erläutern
Klar: in C _muß_ jedes Programm eine Funktion main() enthalten (das ist der "Anfang" des Programms). Die fehlt bei dir und deswegen meckert dein Compiler.

Häng' das:

Code: Alles auswählen

int main(int argc, char *argv[])
{
    SayHello(3);

    return 0;
}
"hinten" an und dein Programm müsste funktionieren.
It's as simple as that. And remember, Beethoven wrote his first symphony in C.

Benutzeravatar
oenone
Beiträge: 223
Registriert: Do Sep 01, 2011 2:42 pm
Wohnort: Bremen
Kontaktdaten:

Re: Prozeduren bringen Fehlermeldungen

Beitrag von oenone » Mo Apr 14, 2014 9:00 am

Etwas Off-Topic: Aus einer Schleife mit return auszubrechen ist schlechter Stil.

xerion21
Beiträge: 162
Registriert: Mo Jul 08, 2013 3:37 pm

Re: Prozeduren bringen Fehlermeldungen

Beitrag von xerion21 » Mo Apr 14, 2014 10:16 am

oenone hat geschrieben:Etwas Off-Topic: Aus einer Schleife mit return auszubrechen ist schlechter Stil.
um es mal konstruktiv zu machen:
Wenn du schon unbedingt abbrechen willst, benutze in einer Schleife lieber ein:

Code: Alles auswählen

break;
;)

canlot
Beiträge: 393
Registriert: Di Mär 08, 2011 11:01 pm
Wohnort: NRW

Re: Prozeduren bringen Fehlermeldungen

Beitrag von canlot » Mo Apr 14, 2014 10:55 am

oenone hat geschrieben:Etwas Off-Topic: Aus einer Schleife mit return auszubrechen ist schlechter Stil.
Jeder hat da seine Vorlieben, aber darf ich fragen warum?
Ich empfinde es nicht als einen schlechten Stil, warum sollte die Funktion die CPU weiter verschwenden wenn sie nicht muss, und als unübersichtlich empfinde ich es auch nicht.
Unwissenheit ist ein Segen

Benutzeravatar
oenone
Beiträge: 223
Registriert: Do Sep 01, 2011 2:42 pm
Wohnort: Bremen
Kontaktdaten:

Re: Prozeduren bringen Fehlermeldungen

Beitrag von oenone » Mo Apr 14, 2014 11:58 am

Mit einem break ist es wartbarer und lesbarer. Mit CPU-Zeit hat das nichts zu tun.

In dem obigen trivialen Beispiel ist es sicher egal.

Wenn du z.B. eine Funktion anpasst, musst du alle return-Statements nochmal untersuchen, ob sie immernoch das tun, was die Funktion tun soll. Mit break hast du nur eine Stelle, an der die Funktion verlassen wird.

xerion21
Beiträge: 162
Registriert: Mo Jul 08, 2013 3:37 pm

Re: Prozeduren bringen Fehlermeldungen

Beitrag von xerion21 » Mo Apr 14, 2014 12:08 pm

canlot hat geschrieben:
oenone hat geschrieben:Etwas Off-Topic: Aus einer Schleife mit return auszubrechen ist schlechter Stil.
Jeder hat da seine Vorlieben, aber darf ich fragen warum?
Ich empfinde es nicht als einen schlechten Stil, warum sollte die Funktion die CPU weiter verschwenden wenn sie nicht muss, und als unübersichtlich empfinde ich es auch nicht.
mit

Code: Alles auswählen

break;
sollte man Schleifen verlassen. Funktionen sollte man weiterhin mit

Code: Alles auswählen

return
verlassen.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Prozeduren bringen Fehlermeldungen

Beitrag von Xin » Mo Apr 14, 2014 12:58 pm

Und man sollte sich überlegen, wie man programmieren möchte.

Es ist guter Stil, eine Funktion nur an einer einzigen Stelle zu verlassen.
Es ist schlechter Stil, unnötige Fragen zu stellen, zum Beispiel, ob die Schleife ihr Ziel erreicht hat (i==5) oder nicht. Das wusste man an der Stelle, wo das return steht schon. Wenn man nach der Schleife nochmals fragen müsste, dann wäre vielleicht ein goto anzuraten.
Moment... goto? Das ist doch ganz schlechter Stil und mieserabel wartbar. Um aus zwei Schleifen rauszuspringen braucht man zwei breaks, was beim zweiten break aber zusätzliche Fragen bedeutet. Hier kann auch Goto helfen.

Hier werden keine Fragen mehr gestellt, es muss auch nicht ein Rückgabecode zwischengespeichert werden. Das break wäre hier optimal. Aber bitte keine Zwangsjacken mit "So macht man das, weil das guter Stil ist", sondern bitte eine bewusste Abwägen von Vor- und Nachteilen einer Lösung.
Hier hätte das "break" den Vorteil, dass die Funktion nur einen Ausgang hat, das return entsprechend den Nachteil, dass die Funktion zwei Ausgänge hat. Ansonsten unterscheiden sich die Lösungen nicht.
break ist also hier die bessere Wahl. Anderswo kann das anders aussehen.



Für Stil muss man Zeit haben.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

xerion21
Beiträge: 162
Registriert: Mo Jul 08, 2013 3:37 pm

Re: Prozeduren bringen Fehlermeldungen

Beitrag von xerion21 » Mo Apr 14, 2014 1:07 pm

Xin hat geschrieben:Und man sollte sich überlegen, wie man programmieren möchte.

Es ist guter Stil, eine Funktion nur an einer einzigen Stelle zu verlassen.
Es ist schlechter Stil, unnötige Fragen zu stellen, zum Beispiel, ob die Schleife ihr Ziel erreicht hat (i==5) oder nicht. Das wusste man an der Stelle, wo das return steht schon. Wenn man nach der Schleife nochmals fragen müsste, dann wäre vielleicht ein goto anzuraten.
Moment... goto? Das ist doch ganz schlechter Stil und mieserabel wartbar. Um aus zwei Schleifen rauszuspringen braucht man zwei breaks, was beim zweiten break aber zusätzliche Fragen bedeutet. Hier kann auch Goto helfen.

Hier werden keine Fragen mehr gestellt, es muss auch nicht ein Rückgabecode zwischengespeichert werden. Das break wäre hier optimal. Aber bitte keine Zwangsjacken mit "So macht man das, weil das guter Stil ist", sondern bitte eine bewusste Abwägen von Vor- und Nachteilen einer Lösung.
Hier hätte das "break" den Vorteil, dass die Funktion nur einen Ausgang hat, das return entsprechend den Nachteil, dass die Funktion zwei Ausgänge hat. Ansonsten unterscheiden sich die Lösungen nicht.
break ist also hier die bessere Wahl. Anderswo kann das anders aussehen.


besser hätte man es nicht ausdrücken können ;)
Für Stil muss man Zeit haben.

Benutzeravatar
oenone
Beiträge: 223
Registriert: Do Sep 01, 2011 2:42 pm
Wohnort: Bremen
Kontaktdaten:

Re: Prozeduren bringen Fehlermeldungen

Beitrag von oenone » Mo Apr 14, 2014 1:35 pm

Am Besten wäre in dem Beispiel natürlich, die Abfrage ob x==5 gleich in die for-Schleife zu integrieren.

Antworten