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
 

KevinT

Grünschnabel
Danke euch allen, jetzt funktioniert es , habe nun getchar(); eine Zeile nach printf()einegeben und nun bleibt das Programm so lange offen bis eine Tasteneingabe erfolgt.
Habt mir sehr geholfen.
 
L

Leila84

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.
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.

Ich hab mir bei bloodshed Dev-C++ beta runtergeladen und das gleiche Problem wie der Threadsteller. Wo kann man die Projekteigenschaften ändern und wie öffnet man ein Konsolenfenster?
Sorry, ich beschäftige mich zum ersten Mal mit sowas ;)
 

deepthroat

Erfahrenes Mitglied
Hi.

Hast du denn schonmal in die Dev-C++ Hilfe geschaut? Du mußt einfach nur ein Consolen Project erstellen bevor du beginnst dein Programm zu schreiben. Das Konsolenfenster öffnet sich dann automatisch.

PS: Du hast schon gesehen, dass das Thema älter als ein Jahr ist, oder?! :)
 

S1d3w1nd3r

Grünschnabel
@Leila84

Wenn Du ein neues Projekt erstellt hast -> Projekt -> Projekt Optionen (ALT-P).

Konsolenfenster:
Start -> Programme -> Zubehör -> Eingabeaufforderung.
 
L

Leila84

Danke, dann weiß ich das jetzt wenigstens schon mal.


Und ja, ich hab das Alter des Threads gesehen, aber weil es halt mein Problem 1:1 ist, ihn wieder hoch geholt ; )