# C Editor/Compiler



## Argead (3. Januar 2010)

Ich suche einen guten C-Compiler/Editor, da ich vorhatte jetzt mit C anzufangen. 
Ich habe mir jetzt Visual Studio C++ express runtergeladen.
Kann ich damit auch normale C Programme schreiben? Und wenn ja wie?


----------



## mattinator (3. Januar 2010)

Argead schrieb:


> Ich suche einen guten C-Compiler/Editor, da ich vorhatte jetzt mit C anzufangen.
> Ich habe mir jetzt Visual Studio C++ express runtergeladen.
> Kann ich damit auch normale C Programme schreiben? Und wenn ja wie?



Was verstehst Du unter "normale C Programme", Windows-Konsolen-Programme mit ANSI-C ?


----------



## Argead (3. Januar 2010)

Ja Ansi/Iso C in einer Konsole also ohne Gui


----------



## v3rtex (3. Januar 2010)

Ja, das ist möglich mit Visual C++ Express

Ansonsten gibts noch die Freeware Dev++ die auch nicht schlecht ist.


----------



## Argead (3. Januar 2010)

Schreib ich das dann einfach in eine normalen c++ datei (cpp), weil .c als Datei finde ich nicht.


----------



## v3rtex (3. Januar 2010)

Genau.
Der Compiler unterstützt C++ und C (wobei Ersteres aber eine Erweiterung von Letzterem ist)

C# ist da wieder ne andere Sache....


----------



## xEbo (4. Januar 2010)

dateiendungen haben erstmal nichts mit dem Compiler zu tun. Es gibt jede Menge Compiler auf dem Markt. Visual Studio ist dabei meiner Meinung nach einer der besten. Solltest du Schüler sein gibt es das auch als Vollversion für relativ wenig Geld. Als Student kann man es oftmals über MSDNAA für lau zu Lernzwecken beziehen.
Ansonsten wären da noch:

Borland Cpp
Mingw
gcc

um nur ein paar Vergleiche zu bieten.

Zum Editor sei gesagt dass man hier jeden Texteditor verwenden kann. Es seie nur gesagt dass dieser Texteditor die Files als "Plain Text" ablegen muss. Word ist daher ungeeignet da hier zumeist noch Formatierungszeichen mit enthalten sind.

mfg,
xEbo


----------



## DMA (4. Januar 2010)

Um xEbo's Text noch etwas zu erweitern/ändern.

Es gibt wirklich massig C-Compiler für fast alle Plattformen/Architekturen.

MinGW ist eine GNU Compiler/Entwicklungswerkzeugs-portierung, wie CygWin es auch enthält. (Mit letzterem kannst du sogar Anwendungen für die Linux u. Unix Plattform unter Windows compilieren und testen)

TinyC ist ein kleiner C Compiler, der aber komplett zum C99 Standard kompatibel ist.

Es gibt natürlich noch etliche andere, aber das sind mit unteranderem die bekanntestens.


----------



## Argead (4. Januar 2010)

Danke für die Antworten.

Falls ich zeit habe, werde ich dann auch noch Minigw ausprobieren.


----------



## junki (6. Januar 2010)

hmm, also wir benützen in der Schule "Code::Blocks"


----------



## Senfgurke (6. Januar 2010)

Wir benutzen Dev C++


----------



## dot (6. Januar 2010)

Jap, wir auch => Bloodshed Software - Dev-C++

Finde ich persoenlich fuer den Anfang auch recht gut, da man sich damit nur auf das Wesentliche konzentrieren kann (Simpler Editor mit Syntax Highlighting + Compiler). Wenn man dann irgendwann auch graphische Komponenten einfliessen lassen will, kann man ja immer noch ein komplettes Dev-Studio nehmen.


----------



## disaster-master (8. Januar 2010)

ich benutze auch code::blocks. ist relativ umfangreich und erweiterbar.


----------



## Argead (17. Januar 2010)

Kann man die Programme die man screibt auch irgendwie offen lassen?

wenn ich etwas debuggen will, öffnet sich das Konsolenfenster, die Anweisungen werden ausgeführt und dann schließt sich das Fenster wieder bevor man erkennen kann ob das Ergebnis das Gewünschte war.

Was kann man dagegen machen?


----------



## xEbo (17. Januar 2010)

Argead schrieb:


> Kann man die Programme die man screibt auch irgendwie offen lassen?
> 
> wenn ich etwas debuggen will, öffnet sich das Konsolenfenster, die Anweisungen werden ausgeführt und dann schließt sich das Fenster wieder bevor man erkennen kann ob das Ergebnis das Gewünschte war.
> 
> Was kann man dagegen machen?



einfach ein getch(); am ende des programms einfügen. das ist ein einfacher workaround. ich weiß grad nur nicht in welcher bibliothek das liegt.


----------



## dot (17. Januar 2010)

#include <stdlib.h>

und am Ende ein

system("PAUSE");

Funktioniert auch.


----------



## Argead (17. Januar 2010)

Danke


----------



## bingo88 (20. Januar 2010)

dot schrieb:


> #include <stdlib.h>
> 
> und am Ende ein
> 
> ...


Wobei die Verwendung von system() nicht so gern gesehn wird. Hat ein paar Nachteile 
Kann nämlich zu Sicherheitslücken und unvorhersehbaren Fehlern führen.


----------



## Bauer87 (20. Januar 2010)

system() erzeugt auch unnötige Abhängigkeiten. Am saubersten ist, das Konsolenfenster vorher u öffnen, und darin das Programm zu starten. Dann bleibt es auch nach beendeter Ausführung offen.

PS: Ich benutze Qt Creator. Der ist echt gut. (Allerdings für  C++ mit  Qt konzipiert.)


----------



## dot (20. Januar 2010)

bingo88 schrieb:


> Wobei die Verwendung von system() nicht so gern gesehn wird. Hat ein paar Nachteile
> Kann nämlich zu Sicherheitslücken und unvorhersehbaren Fehlern führen.





Bauer87 schrieb:


> system() erzeugt auch unnötige Abhängigkeiten. Am saubersten ist, das Konsolenfenster vorher u öffnen, und darin das Programm zu starten. Dann bleibt es auch nach beendeter Ausführung offen.)




Das "system()" wird bei Dev-C++ auch nur gebraucht, damit nach dem Beenden des Programms das Konsolenfenster nicht wieder automatisch zu geht (z.B. Eingabe -Auswertung-> Ausgabe. Das Fenster ist zu schnell zu um die Ausgabe lesen zu koennen).
Extern ein Konsolenfenster zu oeffnen und dann das Programm manuell zu starten ist zwar ein Workaround, aber recht nervig. Wofuer hat das Programm einen Button zum "Kompilieren + Ausfuehren". Nachdem das Programm geschrieben ist, wird die Funktion natuerlich auch wieder entfernt.


----------



## bingo88 (21. Januar 2010)

Ich wollte es ja nur mal erwähnen, schließlich wollen wir ja nicht bei der Entstehung von potentiellen Sicherheitlücken helfen. Ist so ähnlich wie mit GOTO, schlechter Stil halt. Wobei wer über GOTO schimpft, der hat auch noch nie Assembler programmiert


----------



## Bauer87 (22. Januar 2010)

Ich halte "system()" für das Workaround und Konsolenfenster separat öffnen für die "saubere Lösung". (Bietet das Programm keine Einstellung "Fenster offen lassen"?)


----------



## dot (22. Januar 2010)

Die Optionen geben es leider nicht her. Bei Joe (simpler Java-Editor) hingegen war das moeglich. Naja, nach einer gewissen Zeit wechselt man meistens eh in Richtung Entwicklungsumgebung


----------



## Chris0974 (23. Januar 2010)

Argead schrieb:


> Schreib ich das dann einfach in eine normalen c++ datei (cpp), weil .c als Datei finde ich nicht.



Mit Visual Studio kannst du auch die Datei-Endung .c benutzen.

Einfach bei Typ .cpp auswählen und beim Dateinamen .c anhängen
(Beispiel: statt "TestFile" "TestFile.c" eingeben)
Dann verwendet auch der Compiler den Ansi-C Compiler und nicht den vom C++.
C++ Sprachelemente sind dort dann auch nicht erlaubt.

Ein ähnliches Vorgehen benutzt der C++-Compiler für die auflösung eines C-Blocks
Beispiel:
extern "C"
{
...Reiner Ansi-C Code...
}
Hier wird bei der Übersetzung eine virtuelle .c Datei erzeugt der Code der sich im Block befindet hineinkopiert und den Ansi-C Compiler zur Übersetztung übergeben. Nach der Übersetzung durch den Compiler wird diese Hilfsdatei gelöscht. Die dabei erzeugte Object-Datei wird mit der Object-Datei des Originals vereint. So kann man C-Sprachelemente nutzen die unter C++ normal nicht erlaubt sind.
Dasselbe macht der Compiler auch mit Assembler-Code-Abschnitten "extern "asm" {...Assembler-Code...}"

Grüße Christian


----------



## Argead (24. Januar 2010)

Wie kann man in Visual Studio eigentlich einstellen, dass die Zeilen angezeigt werden?
Das wäre beim Debuggen doch sehr hilfreich.


----------



## dot (24. Januar 2010)

Zeilennummern in Visual Studio 2008 anzeigen | Biggle's Blog


----------



## Argead (24. Januar 2010)

Danke.

2 Fragen hät ich noch.

Wie erhält man eine von sich aus lauffähige .exe Datei (Eine Option wie als .exe exportiern habe ich leider nicht gefunden)

Wie macht man eigentlich ein GUI?

Edit:

Warum meckert Visual Studio eigentlich das "scanf" unsicher ist?


----------



## dot (24. Januar 2010)

Im Menue muss es doch so etwas wie "Programm kompilieren" geben?


----------



## Argead (24. Januar 2010)

Man kann es erstellen, aber ich habe nichts gefunden das ermöglicht die fertige exe Datei an einem beliebigen Ort zu speichern.


----------



## dot (24. Januar 2010)

Wenn du ein projekt erstellt hast, dann hast du doch sicherlich ein Verzeichnis angelegt. Darunter muesste die .exe Datei abgespeichert werden. Glaube irgendwo unter bin oder so.


----------



## Argead (24. Januar 2010)

Ja stimmt die war im Projekt Ordner.

Dann wär da noch:
Warum meckert Visual Studio eigentlich das "scanf" unsicher ist? 	

Womit/Wie macht man ein GUI?


----------



## bingo88 (24. Januar 2010)

Zu scanf:
Scanf checkt beim Einlesen nicht, ob das auch alles in die Puffer passt -> Buffer overflow möglich. Da gibt es Ersatzmethoden, bei denen du eine Zahl angeben kannst, wie viele Zeichen maximal gelesen werden sollen.

GUI:
Wenn du GUIs erstellen willst, würde ich dir Qt ans Herz legen. Da brauchst du auch kein VS für, die haben ihre eigene IDE mit nem GCC Compiler. Native Win32 Entwicklung ist ein sehr biestiges Geschäft (zumal idR auch C und nicht C++), MFC macht es auch nicht wirklich klarer. Ich persönliche komme mit Qt sehr gut zurecht und man erhält auch sehr schnell Ergebnisse. Bei Win32 brauchst du erstmal 3 Seiten Code um nen leeres Fenster anzeigen zu lassen


----------



## Bauer87 (24. Januar 2010)

Bin auch vor ein paar Tagen mit Qt angefangen und hab mich gewundert, wie schnell das geht. Ist zwar C++ und kein C, aber dafür geht echt alles super von der Hand.

Und sogar auf meinem Handy läuft das damit erstellte Zeug. Und unter Windows halt auch. (Nutze sonst Linux, war mir bis vor kurzem gar nicht so klar, dass es Qt auch für Windows gibt.)


----------



## Chris0974 (25. Januar 2010)

Wo befindet sich die .exe Datei:

Bei Visual Studio wird bei der Kompilierung, die .exe Datei im Project-Unterordern Debug bzw. Release gespeichert.
Bei der Version im Debug-Ordner sind zusetzliche Infos und Anweisungen fürs Debugen enthalten.
Bei der Version im Release-Ordner sind diese nicht mehr dabei, daduch ist diese Version schneller und sehr viel kleiner.


----------



## Chris0974 (25. Januar 2010)

bingo88 schrieb:


> GUI:
> Wenn du GUIs erstellen willst, würde ich dir Qt ans Herz legen. Da brauchst du auch kein VS für, die haben ihre eigene IDE mit nem GCC Compiler. Native Win32 Entwicklung ist ein sehr biestiges Geschäft (zumal idR auch C und nicht C++), MFC macht es auch nicht wirklich klarer. Ich persönliche komme mit Qt sehr gut zurecht und man erhält auch sehr schnell Ergebnisse. Bei Win32 brauchst du erstmal 3 Seiten Code um nen leeres Fenster anzeigen zu lassen



Du solltes doch schon genauer aufpassen, was du schreibst:
1.) Es sind keine 3 Seiten Code sondern 6 Dateien (3 Klassen mit deren .h)
2.) Diese Dateien werden von Visual Studio automatisch generiert und beinhalten die Grundkonfiguration für das Erstellen von Programme nach dem Dokument/Anzeige prinzip (also die Trennung zwischen Daten-Verwaltung und deren Presentation. Daduch ist es leichter mehrer Anzeigeformen für die gleichen Daten zu erstellen.)
1. Beispiel: Uhr
Dokument enthält die Daten in kodierter From.
Für die anzeige dieser Daten kann man 2 verschiedene Ansichten erzeugen.
Analoge mit Stungen-, Minuten- und Sekundenzeiger oder eine Digitale Darstellung.

2. Beispiel Aktion
Dokument kümmert sich um die Aktienwert speicherung bzw. dessen Akualisierung

Ansichten können z.B. so aussehen:
1.Ansicht: Aktienkurs als Kursdiagramm
2.Ansicht: Aktienkurs als Werttabellen
usw.

Wenn man nur ein Fenster anzeigen möchte kann man dies auch nur mit 1 Datei bzw. Klasse (max. 20 Zeilen Code)

Christian


----------



## Bauer87 (25. Januar 2010)

Wenn man nur ein Fenster anzeigen will, geht das auch komplett ohne Programmierkenntnisse. Einfach im GUI-Editor alles so zusammenklicken, wie man es haben will. Fertig. Es macht dann nur halt noch nichts.

Dazu muss man die einzelnen Elemente der GUI noch mit Funktionen verknüpfen. Es läuft aber auch schon ohne eine einzige Zeile Code geschrieben zu haben. (Wird bei MSVC++ nicht anders sein als bei Qt.)


----------



## bingo88 (26. Januar 2010)

Chris0974 schrieb:


> Du solltes doch schon genauer aufpassen, was du schreibst:
> 1.) Es sind keine 3 Seiten Code sondern 6 Dateien (3 Klassen mit deren .h)
> 2.) Diese Dateien werden von Visual Studio automatisch generiert und beinhalten die Grundkonfiguration für das Erstellen von Programme nach dem Dokument/Anzeige prinzip (also die Trennung zwischen Daten-Verwaltung und deren Presentation. Daduch ist es leichter mehrer Anzeigeformen für die gleichen Daten zu erstellen.)
> 1. Beispiel: Uhr
> ...



Ich mach den Kram jetzt seit 7 Jahren. Wenn man *nicht* mit Visual Studio arbeitet, dann hat man auch keinen Assistenten, der einem irgendwas generiert. 2 Dateien von denen du sprichst, sind außerdem für die precompiled Header also auch nicht unbedingt notwendig.
Außerdem was hat das ganze mit MVC zu tun, Win32 ist nicht mal Objektorientiert? Das ist alles plain C außer du arbeitest mit der MFC...

Mir ging es jetzt auch primär darum, den Unterschied zwischen Win32 und Qt anzusprechen. Ich persönlich finde Qt halt viel angenehmer als dieses Gewusel auf Systemebene...


----------



## DaRkNeZRaVer (13. Februar 2010)

Gibt zurzeit die Visual Studio 2010 Beta, die kann man sich kostenlos runterladen. EInfach mal googlen, und zu dem Programm braucht man ja eigentlich nichts weiter zu sagen, enthält ja alles!


----------

