C Programm läuft nicht

KevinT

Grünschnabel
Hallo,
ich bin noch ein Anfänger der Sprache C und habe jetzt 2 IDE einmal Borland C++ Builder 6 und Dev-C++4.9.8.0. Wollte mit beiden das ganz einfache Programm Hallo Welt laufen lassen nur es funktioniert einfach nicht. Das Kompelieren funktioniert einwandfrei, doch leider wird bei Borland kein Text angezeigt und Dev-C++ öffnet und schliesst dannach immer sofort das MS Dos Fenster. Mein Quelltext sieht so aus:

#include <stdio.h>
int main()
{
printf("Hallo Welt\n");
//in der Zeile habe ich auch schon mal 'return 0;' geschrieben funktionierte aber auch nicht.
}

so das war er, eigentlich ganz einfach und steht auch in allen Dokumenten gleich geschrieben. Vielleicht kann mir ja jemand helfen.
Danke.
 

Rene Albrecht

Erfahrenes Mitglied
Original geschrieben von KevinT
Das Kompelieren funktioniert einwandfrei,
Das ist schonmal ein guter Anfang! :)
doch leider wird bei Borland kein Text angezeigt
Ich tippe darauf, dass Du es in der IDE nicht als Konsolenanwendung deklariert hast! Ich kenne Borland da nicht - aber bei LCCwin32 ist habe ich das gleiche Phänomen, wenn ich in den Projekteigenschaften nicht Konsolenanwendung sondern z.B. Dialoganwendung aktiviere.
und Dev-C++ öffnet und schliesst dannach immer sofort das MS Dos Fenster.
Völlig legitim: das Programm ist eine Konsolenanwendung. D.h. es öffnet eine Konsole (bzw. "DosBox"), schreibt "Hallo Welt!" rein und schließt sich wieder... Am besten testest Du es, indem Du selbst ein Konsolenfenster öffnest, in Dein Projektverzeichnes gehst und die .exe von Hand startest.
 

Dario Linsky

Erfahrenes Mitglied
Was ist denn daran bitte falsch?
Die Funktionsdeklaration. Die main-Funktion sollte laut C99-Standard (der war es glaub ich) einen int-Wert an das Betriebssystem zurückgeben, damit das OS weiß, ob die Anwendung korrekt gelaufen ist oder einen Fehlercode liefert.
Sicher ist das ganze drumherum mit den Rückgabetypen gerade für totale Einsteiger verwirrend, aber das ändert nichts daran, dass "void main" falsch ist. Viele Compiler weigern sich soweit ich weiß sogar, das zu übersetzen, wenn man nicht zusätzliche Flags beim Compileraufruf setzt.

Hier steht auch noch einiges zu dem Thema:
http://www.eskimo.com/~scs/readings/voidmain.960823.html
 

Dudadida

Erfahrenes Mitglied
Ja, aber das ist C Wirrwarr. Windows ist es egal, das springt einfach nur in die Aufruffunktion und pusht vorher Parameter. Wenn man die nicht haben will, dann braucht man auch keine Argumente angeben und wenn es einem egal ist, was am Ende des Programms im eax steht (also was dem Exit Aufruf übergeben wird), dann braucht man auch kein return, also bräuchte man die main auch nicht als int deklarieren. Deswegen würde ich das nicht pauschal als "falsch" bezeichnen.
Allerdings soll es halt so gemacht werden und es ist sicherlich besserer Stil, wenn man denn schon C programmiert (nutze selbst immer int main), ist aber eben, wie du schon sagst, nicht so einsteigerfreundlich - na gut, die ganze Sprache C ist meiner Meinung nach nicht einsteigerfreundlich... (Die meisten Compiler machen es übrigens, hab ich zumindest festgestellt.)
 

Dario Linsky

Erfahrenes Mitglied
Die meisten Compiler machen es übrigens, hab ich zumindest festgestellt.
gcc macht es soweit ich mich erinnern kann nicht. Mit welchen hast du es getestet?

Windows ist es egal
Dadurch wird es nicht richtiger.

Deswegen würde ich das nicht pauschal als "falsch" bezeichnen.
Wie gesagt: C ist eine standadisierte Sprache und was im Standard festgelegt ist, das ist richtig und kann als valides C angesehen werden. Alles andere sind nicht standardkonforme Macken der einzelnen Compiler - und genaugenommen falsch.
 

Dario Linsky

Erfahrenes Mitglied
Folgender Code:
Code:
void main() { }

Ausgabe vom gcc in Dev-C++:
Compiler: Default compiler
Führt gcc.exe... aus
gcc.exe "C:\Dokumente und Einstellungen\Administrator\Desktop\test.c" -o "C:\Dokumente und Einstellungen\Administrator\Desktop\test.exe" -I"C:\Programme\Dev-Cpp\include" -L"C:\Programme\Dev-Cpp\lib"
C:/Dokumente und Einstellungen/Administrator/Desktop/test.c: In function `main':
C:/Dokumente und Einstellungen/Administrator/Desktop/test.c:1: warning: return type of `main' is not `int'

Ausführung beendet
Kompilierung erfolgreich