Pures C unter Windows



  • Hallo,

    ich möchte mir gern C beibringen unter Windows XP (erstmal Konsolen-später auch Windows Programme).
    Nun habe ich gelesen, dass es viele IDE's gibt, die ihre eigenen Bibliotheken mitbringen. Meine Frage nun:

    Wenn ich möglichst "pures" C lernen will, also ANSI-C, ohne jegliche Herstellerbibliotheken, was nehme ich dann am besten zum entwickeln?
    Verstehe ich das denn richtig, dass eine Standard C Laufzeitumgebung schon bei Windows dabe ist? Oder ist damit die Standard Libery gemeint?
    Ich hoffe, ich vertausche da nichts?! Könnte mir jemand einen Tipp geben?
    Bisher dachte ich, ich nehm am besten den gcc für Windows. Aber ich brauch doch auch noch einen Linker, oder? Und ein Debugger wäre wohl auch nicht schlecht.

    Grüße

    alaan



  • gcc fuer windows (mingw) braucht keinen linker, ist alles integriert in gcc.
    und als debugger kannst du dir vom mingw-project den gdb fuer windows runterladen. ist aber commmandline-only.

    Standard-C kannst du in allen IDEs/compilern programmieren, sofern du nur funktionen aus der C-standard-bibliothek verwendest ist das auch unabhaengig von spezifischen libraries (wobei ich nicht weiss ob alle C-standard-library-implementierungen wirklich exakt gleich sind, aber ich denke grosse unterschiede duerfte es nicht geben).



  • achso, und: mit gcc kompilierte programme die nur die standardfunktionen nutzen brauchen einzig und allein die msvrt.dll zum laufen, die ist seit win98 standardmaessig bei windows dabei. also brauchst du dir da keine gedanken machen.



  • für am besten geeignet für einsteiger, gerade unter windows, halte ich das visual studio von microsoft. gibt jetzt glaub ich schon n neues, musst dir dann aber die express version runterladen. die IDE ist übersichtlich gestaltet, der compiler erzeugt kleine exe-dateien, integrierter debugger... was will man mehr 😃
    einziger schwachpunkt: anscheinend nicht so gant C99 konform 😞



  • ist time.h ansi C?

    würd mich auch interessieren wo ich erkenne ob ne bibliothek ansi C ist oder C++



  • Warum C ???

    Programmiere doch mit C++. Da C eine Teilmenge von C++ ist, kann man alles über C lernen wenn man C++ programmiert. Gleichzeitig bietet sich ein Einstieg in die Objektorietierung von C++ an, welche ich erst so richtig schätzen lernte als ich C programmierte.

    Ansonsten kann ich auch nur die Visual Programme empfehlen. Die bieten Beispielprogramme an, mit denen man sich in C und der Windows GUI einarbeiten kann.



  • BorisDieKlinge schrieb:

    ist time.h ansi C?

    würd mich auch interessieren wo ich erkenne ob ne bibliothek ansi C ist oder C++

    Ist ANSI C, wenn es ein C++ Header wäre hieße er einfach nur <time>.

    Und dem Threadersteller würde ich auch wärmstens C++ empfehlen. Mühe dich nicht mit C ab, Resultate erziehlt man als Anfänger am Besten mit C++.



  • Für Windows wäre wohl MinGW zu empfehlen. Der kann C99 und ist ziemlich gut. IDEs gibt es diverse (Code::Blocks etc.)

    santa klaus schrieb:

    einziger schwachpunkt: anscheinend nicht so gant C99 konform 😞

    Er kann gar kein C99.

    @Boris
    Ja, time.h gehört zu C. ISO C++ sind die Sachen ohne .h am Ende 🙄

    @Bitte ein Bit
    Weil man in C++ normalerweise fundamental anders als in C programmiert.



  • Und C ist auch keine echte Teilmenge von C++. War es nie, wird es nie sein.



  • Hallo,

    danke für eure Tipps. Ich seh nun ein wenig klarer. Ich glaube vor allen Dingen die msvrt.dll ist eine genauere Untersuchung wert. Wenn ich nicht irre, ist das doch sozusagen das, was bei Windows an C eingebaut ist, gell?!
    Kann ich mir das so vorstellen, dass mein Programmcode an diese msvrt.dll übergeben wird nach dem kompilieren? Und die C-Funktionen, wo sind die denn? Der Compiler übersetzt doch meinen Quelltext, indem er die Standard C-Library benützt, oder nicht. Irgendwie ist mir der Ablauf noch nicht ganz klar, könnte mir jemand die Schritte erklären bitte, insbesondere, wo die C-Funktionen(also die Library) liegt? Hat Windows die schon oder muss die nachträglich installiert werden. Also

    - ich schreibe den Quelltext in einem Editor
    - kompilieren (was geht da vor sich bezüglich Library)
    - die Runtime führt doch dann nur noch aus, oder? Spielt da die Library noch eine Rolle an der Stelle?

    Ich weiß, ich bin ein blutiger Anfänger, aber ich fühl mich wesentlich wohler, wenn ich einige Grundlagen verstanden hab. In Tutorials wird meist sofort angefangen zu programmieren, meine speziellen Fragen wurden nicht beantwortet.

    Ihr scheint ja schon länger dabei zu sein, vielleicht könnt ihr mir ja auf die Sprünge helfen.

    santa klaus schrieb:

    für am besten geeignet für einsteiger, gerade unter windows, halte ich das visual studio von microsoft. gibt jetzt glaub ich schon n neues, musst dir dann aber die express version runterladen. die IDE ist übersichtlich gestaltet, der compiler erzeugt kleine exe-dateien, integrierter debugger... was will man mehr 😃
    einziger schwachpunkt: anscheinend nicht so gant C99 konform 😞

    Zu Visual Studio Express . Da is doch auch wieder eine Zwischenschicht dabei, das .Net Framework, gell. Ist denn die C Programmierung damit genauso wie mit einem kleinen Compiler?

    Was haltet ihr eigentlich vom LCC-Win32? Ich hab gute Kritiken gelesen, gerade für Anfänger soll das Tool gut sein.

    noch ein Frage zum MingW. Das ist also die Win Variante vom gcc? Ich meine, ich hätte den gcc für Windows auch separat gesehen. Aber wenn bei MinGw alles schon dabei ist, ist es wohl die bessere Variante.

    Bitte ein Bit schrieb:

    Warum C ???

    Programmiere doch mit C++. Da C eine Teilmenge von C++ ist, kann man alles über C lernen wenn man C++ programmiert. Gleichzeitig bietet sich ein Einstieg in die Objektorietierung von C++ an, welche ich erst so richtig schätzen lernte als ich C programmierte.

    Ansonsten kann ich auch nur die Visual Programme empfehlen. Die bieten Beispielprogramme an, mit denen man sich in C und der Windows GUI einarbeiten kann.

    Ich dachte, als Anfang mach ich mal C, später C++. Warum ich darauf komme ist, Windows ist doch auch in C programmiert größtenteils, oder. Hier und da noch Assembler, hab ich gelesen, aber eben C, kein C++. Warum ist das so?. Dann denke ich doch, dass C nicht einfach nur eine Untermenge von C++ ist, sondern unabhängig davon eine Daseinsberechtigung hat, oder?

    Nun ja, wie gesagt, ich würde mich freuen über eine kleine Zusammenfassung bezüglich des Themas C Programmieren unter Windows (vom Quelltext bis zur Ausführung, welche Dateien werden wie angesprochen und wo liegen die bzw. sind sie schon bei Windows vorhanden?

    Grüße

    alaan



  • alaan schrieb:

    Was haltet ihr eigentlich vom LCC-Win32? Ich hab gute Kritiken gelesen, gerade für Anfänger soll das Tool gut sein.

    LccWin32 ist ein recht komplettes IDE inkl. Compiler und nicht nur für den Einstieg in C absolut brauchbar. Für den Anfänger ist es, nach kurzer Zeit, recht leicht zu bedienen. Nur Wedit hat abundzu eine Macke und ich bin mir nicht sicher ob das Tool schon "vista-fähig" gemacht wurde.

    tt



  • Alsoooo....
    Eine Dll wie z.B. die msvcrt.dll wird zwar Runtime genannt, da sie grundlegende Funktionen wie z.B. malloc/free bereitstellt (exportiert), prinzipiell wäre es aber möglich Programme ohne diese Runtime Dlls/Librarys zu schreiben. Librarys deshalb, da es diese Dlls auch als statische Librarys (msvcrt.lib) gibt. Dann ist die Dll sozusagen schon komplett in deiner Exe enthalten.

    Beim kompilieren geschieht grob folgendes:
    Den Code den du im Editor geschrieben hast wird beim kompilieren analysiert = in seine Einzelteile zerlegt. Wenn du irgendwo in deinem Programm z.B. malloc verwendest, schaut der Kompiler in den Header Files nach ob diese Funktion irgendwo definiert ist (stdlib.h). Der Kompiler kennt diese Funktion bisher nur. Wenn der Kompiler den Code durchgegangen hat, kommt der Linker ins Spiel. Der Linker verknüpft die Stelle an der du diese Funktion aufrufst mit dem Punkt in der die Funktion in der Library anfängt. So wird dein komplettes Programm erstellt. Wie das mit der Ausführung abläuft ist ein anderes Thema, sollte dich aber eigentlich überhaupt nicht interessieren. Ein kann ich dir aber sagen, es hat mit den "Runtime" Librarys überhaupt nichts zu tun.

    Ich kann dir eigentlich auch nur VisualC++ Express für die Entwicklung unter Windows empfehlen. Ob der jetzt C99 konform ist oder nicht, sollte eigentlich vollkommen egal sein. Eine "Zwischenschicht" wie .NET (dafür gibt es wirklich eine Runtime/oder z.B. Java benötigt auch eine Runtime) gibt es dabei auch nicht. GCC gibt es nicht für Windows, da heißt er einfach MinGW. Mehr Gedanken

    Zur C/C++ Frage. Nimm C++. Windows ist größtenteils in C geschrieben aber glaubst du Windows wurde von Anfängern geschrieben? Das hat 1. historische Gründe und zig Millionen Zeilen Code lassen sich nicht einfach auf C++ portieren. 2. Müssen oder zumindest werden Hardwarenahe Dinge oftmals in C geschrieben. 3. Werden immer mehr (neue) Teile von Windows (z.B. gdiplus) in C++ geschrieben. Die Assembler-Teile haben Hardware-und Performance Hintergründe.
    Die Möglichkeiten die dir die (wie bescheuert geschrieben) fertigen String-Klassen und Kontainer bieten gibt es nur für C++. Ich habe auch mit C angefangen und viele "Projekte" von mir sind gescheitert, da ich mich zu viel auf die Grundlegenden Funktionen (vor allem String-Handling) konzentrieren musste.



  • Bitte ein Bit schrieb:

    Warum C ???
    Programmiere doch mit C++.

    http://damienkatz.net/2004/08/why-c-sucks.html
    http://nothings.org/computer/cpp.html
    http://www.courageunfettered.com/stuf/cpp/
    usw...

    topic: gibbet noch den hier: http://www.christian-heffner.de/
    reines C, ohne ++ ballast und ausserdem mit C99 features.
    🙂



  • Bitte ein Bit schrieb:

    Programmiere doch mit C++. Da C eine Teilmenge von C++ ist, kann man alles über C lernen wenn man C++ programmiert. Gleichzeitig bietet sich ein Einstieg in die Objektorietierung von C++ an, welche ich erst so richtig schätzen lernte als ich C programmierte.

    Das ist ein Mythos. Wie schon andere gesagt haben: C ist keine Teilmenge von C++. Außerdem gibt es Konzepte in C++, die in C entweder gar nicht vorhanden sind oder schwer schwer implementierbar sind.

    Lass doch die Leute damit anfangen, womit sie wollen, der OP hat nicht danach gefragt, ob er lieber C++ lernen sollte, also lass das. Der OP wird schon seine Gründe haben, warum er C benutzt.

    Und fangen wir bitte nicht den Millionsten Thread C vs. C++, die gibt es genug und es kommt nur Mist raus. C hat Vor- und Nachteiel, C++ ebenso. Manchmal empfiehlt sich C zu benutzen, machmal C++ und manchmal sogar etwas ganz anders. Weder C noch C++ sind keine Allheilmittel.


Anmelden zum Antworten