Hallo!
/* hello.c -- hello world example. */
#include <stdio.h>
int main () {
printf ("Hello world!\n");
return 0;
}
$ gcc -c -mno-cygwin hello.c
was machst Du hier? Das ist ja noch kein Compilieren, oder? Und .c, das ict doch kein c++, gibt es da noch Unterschiede?
Ja, c++ ist eine Erweiterung von c, und zwar um die Möglichkeit der objektorientierte Programmierung. Deshalb nutzt man (Pfui!!, man macht es nicht!! ;-)) in c++ normalerweise nicht mehr die Funktion printf, sondern Streams als Objekte. Es geht aber trotzdem noch.
Doch, das genau ist Compilieren. Folgendes läuft beim gcc eigentlich ab:
1. Präprozessor
Der Quellcode hello.c wird um den Quellcode der angegebenen Header (stdio.h) erweitert. In stdio.h steht z.B. die Definition der Funktion printf. Der Präprozessor kann noch mehr, aber bei diesem einfachen Programm ist das alles. Es gib dann eine hello.i
2. Compiler
Aus dem Quellcode entsteht eine Assembler-Datei hello.s bzw. hello.asm.
3. Assembler
Aus der Asembler-Datei wird eine Objekt-Datei hello.o bzw. hello.obj in Maschinensprache.
Die Schritte kannst Du mit Optionen am gcc auch einzeln gehen. Das macht aber kaum jemand.
$ gcc -o hello -mno-cygwin hello.o
ja, das kenne ich(obwohl es bei mir ja nicht funktioniert hat), aber woher hast Du jetzt hallo.o?
klar?
4. Linker
Verbindet die Objekt-Datei mit Objekt-Code aus Bibliotheken aus dem /lib-Verzeichnis des Compilers zu einem lauffähigen Programm hello.exe.
Aber Dein "Hello World" will ja Streams nutzen. Da ist schon eine System-spezifische Bibliothek nötig.
http://www.nanotech.wisc.edu/~khan/software/gnu-win32/mno-cygwin-howto.txt
Was heißt denn System-Spezifisch? nur Windows-spezifisch, oder auch Wind2000 spezifisch...?
Windows-spezifisch
Wenn Du einen freien C-Compiler ganz ohne cygwin suchst, dnan kannst Du auch den von Borland verwenden http://www.borland.com/products/downloads/download_cbuilder.html oder Du siehst Dich einmal bei http://www.c-plusplus.de/body_compiler.htm um.
Jep.
oder: http://www.mingw.org/
Auweia, habe mir den von Borland gezogen, abr blicke noch nicht ganz durch, ich versuche einfach weiter ;-)
Grüße
Andreas
Gruß
Axel