^1The Real Adok's Way from QBasic to C Copyright by The Real Adok ^0Heute: Part 1 - Erste Schritte ^1 +++ Einleitung +++ Hallo Freunde! Dieser Kurs richtet sich vor allem an Leute, die schon in QBasic programmieren k”nnen (oder zumindest Grundkenntnisse besitzen) und jetzt die Prospe C erlernen wollen. Um C zu erlernen, ben”tigt ihr natrlich erst einmal einen C-Compiler. Es gibt mittlerweile schon viele („ltere) C-Compiler auf CDs. Auf der Turbo-Toolbox-CD findet ihr z.B. den Compiler Quick C 2.51, der zwar ziemlich buggy ist, aber fr Einsteiger ganz gut geeignet ist (solange ihr keine systemnahen Sachen macht). Er hat folgende Vorteile: ^0 - Die IDE entspricht dem MS-DOS-Editor von Windows 95, ist also QBasic ^0 mindestens ebenbrtig, wenn nicht noch besser. ^0 - Es gibt einige Spezialbefehle, die es in den anderen C-Compilern nicht ^0 gibt. Aber sie erleichtern den Einstieg in C ungemein! ^0 - Quick C hat 'ne coole Online-Hilfe. ^0 - Quick C beherrscht alle Befehle des ANSI-C-Standards! Naja, ANSI-C ^0 beherrscht jeder C-Compiler... ^0 - ... und das wichtigste: Quick C ist von Microsoft! GR™™™HL! So, nach diesen kleinen Infos m”chte ich einmal mit dem Kurs beginnen. HALT! Kurz noch etwas: ^1 +++ Warum C? +++ Hier gibt's 'nen einfachen Grund: 32-Bit-Betriebssysteme wie Unix/Linux, Win95 und OS/2 sind groá im Kommen - und sie sind alle in C gecodet! Wer also etwas mit diesen Betriebssystemen anfangen will, sollte C/C++ selbst beherrschen, um auch wirklich alle Geheimnisse herausfinden und systemnahe Routinen benutzen zu k”nnen. Auch Leuten, die noch in DOS & Co. coden, kann C viele Vorteile bringen. Welche Vorteile es sind, werdet ihr sp„ter noch ausfhrlich erfahren. Nun aber zu einer wichtigen Frage: ^1 +++ Was ist C berhaupt ??? +++ C ist, wie auch Basic und Pascal, eine Hochsprache. Allerdings ist C trotzdem sehr maschinennah, weshalb es auch als die "mittlere Sprache" bezeichnet wird. C++ und die weniger bekannte Sprache Forth z„hlen auch zu den mittleren Sprachen. C++ ist eine objektorientierte Sprache, die auch C-Befehle verarbei- ten kann. Das heiát, wer einmal C kann, kann leicht auch C++ erlernen. Viele Anwendungsprogramme und Spiele sind in C gecodet. Um nur einige Beispiele aufzuz„hlen: Linux & so ziemlich alle Unix-Applikationen, Windows (95), WinWord (und die restlichen MS-Produkte), fast alle Spiele,... C gibt es auáerdem fr fast jede Plattform, DOS, Unix, Windoofs, Windoofs 95, Windows NT (wenigstens ein Windows, das nicht doof ist), nur fr den Sinclair ZX-81 konnte ich noch keinen C-Dialekt entdecken :-). Also, wie ihr seht, es lohnt sich, C zu erlernen! ^1 +++ Los geht's: Etwas Theorie +++ Jetzt m”chte ich mal eine ganz allgemeine šbersicht ber C machen. Wenn ihr eine Idee fr ein Programm in C habt, mát ihr folgende Schritte tun: In der Sprache gibt es sogenannte Headerdateien. Sie sind schon vorgefertigt und enthalten Deklarationen der Befehle von C. Die gewnschten Headerdateien mssen am Anfang eines C-Programms in dieses Programm eingebunden werden. Danach kann man globale Variablen definieren. Wie ihr sicherlich schon von Basic wiát, sind globale Variablen Variablen, die sowohl im Hauptprogramm als auch in allen Funktionen und Prozeduren verwendet werden k”nnen. Nun beginnt das Hauptprogramm. Hier wird bestimmt, welche Funktionen der Reihe nach aufgerufen werden. Wenn das Hauptprogramm durchlaufen ist, ist das Programm zu Ende. In C ist das Hauptprogramm auch eine Funktion, die den Namen main hat. Fr sie gelten alle Bestimmungen, die auch fr andere Funktionen gelten: Man kann main sowohl Parameter bergeben als auch main einen Wert zurckgeben lassen. Nach main folgen dann die anderen Funktionen, falls man berhaupt noch andere ben”tigt (viele Funktionen wie z.B. die Textausgabefunktion printf sind schon vordefiniert). Nun zu dem grundlegenden Aufbau einer Funktion am Besipiel der Funktion main. Zuerst der Funktionskopf: ^0 void main(void) Das erste void gibt hier an, daá main keine Werte zurckgibt, und das zweite gibt an, daá man main auch keine Parameter zuweisen kann. Als n„chstes kommt die offene geschwungene Klammer. Danach folgen Definitionen von lokalen Variablen, Funktionsaufrufe und Befehle. Also genau wie in einem Basic-Programm. Zum Schluá folgt die geschwungene Klammer, diesmal "Klammer zu". Hier einmal eine Beispiel-Funktion: ^0 void main(void) ^0 { ^0 char i; // Variablendefinition ^0 printf("Hallo!"); // Funktionsaufruf ^0 } Nun zu den Vorteilen von C: Zun„chst einmal die Besonderheit, daá es NUR Funktionen und keine Prozeduren gibt. Man kann aber jede Funktion genauso wie eine Prozedur aufrufen. Dann wird der Rckgabewert einfach verworfen. Der zweite Vorteil von C ist, daá man echt VIEL in eine Anweisung schreiben kann, wozu man in anderen Sprachen mehrere Anweisungen br„uchte. Beispiel: ^0 while(printf("Hallo!\n"),a=b++=++c,a!=c); Diese Anweisung ist zwar etwas unsinnig :-), soll aber mal demonstrieren, was man in C in einer Anweisung unterbringen kann. Das gleiche Proggy máte in Basic so lauten: ^0 DO ^0 PRINT "Hallo!" ^0 c = c + 1 ^0 b = c ^0 a = b ^0 b = b + 1 ^0 LOOP WHILE a <> c Dann hat C noch weitere Vorteile. Zum Beispiel werden kleinere EXE-Dateien erzeugt, weil durch die Technik der Headerdateien nur die Teile der Laufzeit- bibliothek eingebunden werden, die auch wirklich ben”tigt werden. Die Technik des Pr„prozessors hat auch viele Vorteile. Was es mit dem Pr„prozessor auf sich hat, kommt dann in einer eigenen Folge des Kurses. Auáerdem hat C noch einige Besonderheiten, die fr Basic-Programmierer wahrscheinlich am Anfang gew”hnungsbedrftig sein werden: ^0 - Alle Schlsselw”rter werden klein geschrieben. Wird ein Schlsselwort groá ^0 geschrieben, ist es fr den C-Compiler ein anderes Schlsselwort! ^0 - Alle Variablen mssen definiert werden. ^0 - Am Ende jeder Zeile, in der sich ein Funktionsaufruf befindet, steht ein ^0 Semikolon (;). ^0 - Wenn man eine Funktion aufruft, aber keine Parameter bergibt, mssen die ^0 Parameterklammern trotzdem geschrieben werden! ^0 - Arrays haben eckige Klammern. ^0 - Wenn man einen Array mit mehreren Dimensionen hat, schreibt man nicht z.B. ^0 a(3,1,4), sondern a[3][1][4]! So, nach dieser grauen, nichtssagenden Theorie, kommt endlich... ^1 +++ DAS ERSTE PROGRAMM !!! +++ Wir beginnen mal mit einem etwas einfacheren Programm, aber ihr werdet sehen, daá es fr den Anfang schon kompliziert genug ist ;-). Also hier ist es, das achte (oder neunte?) Weltwunder, der Stein der Weisen, den jeder Programmier- guru ehrfrchtig anbetet, das HALLO-WELT-PROGRAMM! ^0 // Das Hallo-Welt-Programm ^0 #include ^0 void main(void) ^0 { ^0 printf("HALLO WELT!\n"); ^0 } Die Einrckung(en) braucht ihr natrlich nicht zu beachten, die mache ich nur, damit sich das Proggy vom Text abhebt. So, und jetzt heiát es: das Programm mit C compilieren! Wenn euer C-Compiler mit einer IDE (Integrated Development Environment, das heiát, Editor) gesegnet ist, k”nnt ihr das Programm direkt im integrierten Editor abtippen und von dort aus starten. Falls ihr jedoch einen Compiler ohne IDE, z.B. GNU C++ oder die DOS-Version von Symantec C habt, mát ihr wie in Assembler vorgehen: Das Listing mit einem normalen ASCII-Editor abtippen und das Programm mit einigen DOS-Befehlen manuell compilieren & linken. ^0- Quick C: Quick C starten (ins BIN-Verzeichnis des Quick-C-Compilers wechseln ^0 und die Tastatur mit QC maltr„tieren), den Geniestreich abtippen und ^0 drcken! ^0- Borland C++: Hier geht's genauso, nur muá man BC eingeben und F9 drcken! Es erscheint in QC netterweise gleich eine Dialogbox der IDE, in der ihr den Programmnamen eingeben k”nnt, unter dem das Kunstwerk dann abgespeichert wird. Anschlieáend wird gleich eine EXE-Datei erzeugt. (Sorry, das ist "aus tech- nischen Grnden" immer notwendig, auch bei einer noch so klitzekleinen Žnderung! Bei Speicherplatzmangel k”nnt ihr die EXE's und die Zwischenfiles ja nachher wieder l”schen...) Dann wird das Programm gestartet. Es erscheint der Text "HALLO WELT!" auf dem Bildschirm. Danach gibt der Compiler eine kleine Meldung aus, wie lange die Ausfhrungsdauer war und welcher Wert von main zurckgegeben wird, und fordert den User (sprich: EUCH!) auf, eine beliebige Taste zu drcken. Das macht ihr dann auch, und flugs befindet ihr euch wieder in der IDE. Super, nicht? Jetzt will ich mal das Programm (wieder einmal) Zeile fr Zeile durchgehen. ^0Zeile 1: Tja, das ist ein kleiner Kommentar, wie ihr ihn aus Basic kennt. ^0 Statt REM sind's in C zwei Schr„gstriche, doch sonst bleibt alles ^0 beim alten. ^0 Wenn wir schon dabei sind: In C gibt es noch eine zweite Art von ^0 Kommentaren. Eingeleitet wird der Kommentar mit /* und abgeschlossen ^0 mit */. (Der Punkt geh”rt nicht dazu, das ist nur das Satzzeichen!) ^0 Dieser Kommentar hat den Vorteil, daá man mit ihm l„ngeren Kommentar- ^0 Text ber mehrere Zeilen schreiben kann, ohne jedesmal das Kommentar- ^0 zeichen wiederholen zu mssen. ^0 Wir h„tten also statt der ersten Zeile auch ^1 /* ^1 Das Hallo-Welt-Programm ^1 */ ^0 schreiben k”nnen. ^0Zeile 2: Leerzeile. Sie dient (wie in Basic) nur zur šbersichtlichkeit des ^0 Programms. Ich werde also knftig nicht mehr auf die Leerzeilen ^0 eingehen. ^0Zeile 3: Hier ist #include. Das ist der Befehl, mit dem man Headerdateien in ^0 eigene Programme einbinden kann. Als Parameter muá der Name der ^0 Headerdatei eingegeben werden. Dabei gibt es zwei M”glichkeiten: ^0 Die eine M”glichkeit ist, den Namen der Headerdatei zwischen ^0 Kleiner/Gr”áerzeichen zu schreiben (wie im Beispiel). Dann sucht der ^0 Compiler automatisch in den ber "Optionen-Umgebung" eingestellten ^0 Pfaden. ^0 Die andere M”glichkeit ist, den Namen der Headerdatei zwischen zwei ^0 Anfhrungszeichen zu setzen. Dann l„át sich auch ein Pfad mitangeben. ^0 Allerdings sucht der Compiler in diesem Fall nicht automatisch in den ^0 voreingestellten Pfaden! ^0 Die Headerdatei, die in diesem Programm eingebunden wird, heiát ^0 stdio.h. Sie ist die am meisten benutzte Headerdatei und beinhaltet ^0 die Standardbefehle fr Eingabe und Ausgabe. Andere Headerdateien ^0 sind zum Beispiel conio.h, assert.h, graph.h und process.h. ^0Zeile 5: Ja, hier isses wieder: Die Funktion main! An diesem Exempler dieser ^0 h„ufig anzutreffenden Gattung ist deutlich zu erkennen, wie main ^0 aufgebaut wird (nett ausgedrckt, stimmt's?). Zuerst die Angaben, daá ^0 es keinen Rckgabewert und auch keine Parameter gibt. In Zeile 6 dann ^0 die offene geschwungene Klammer, und in Zeile 8 die geschlossene ^0 geschwungene Klammer. Dazwischen (also in Zeile 7) stehen die Befehle ^0 und Funktionsaufrufe. ^0Zeile 7: Hier ist unsere erste Funktion, printf! Sie ist in stdio.h definiert, ^0 also muá diese Headerdatei eingebunden werden, damit printf in einem ^0 Programm benutzt werden kann. Als Parameter ist ein in Anfhrungs- ^0 zeichen eingeschlossener Text, der noch einmal in einer Klammer ^0 verpackt ist. Wir sehen also: Parameter werden immer eingeklammert. ^0 Die Anfhrungszeichen kommen daher, weil der Parameter ein String ^0 ist. Siehe da: Wieder eine Žhnlichkeit mit Basic! Auch in C stehen ^0 Strings immer zwischen Anfhrungszeichen! ^0 Wozu dient nun dieses printf? In dieser EINFACHSTEN Form gibt es ^0 einfach den als Parameter angegebenen Text auf den Bildschirm aus! ^0 Doch printf entspricht keineswegs dem PRINT von Basic, sondern PRINT ^0 mit Semikolon, denn printf macht nicht automatisch einen Zeilenvor- ^0 schub. Da muá erst nachgeholfen werden, und zwar mit der sogenannten ^0 Escape-Sequenz \n. Escape-Sequenzen sind Steuerzeichen, die sich in ^0 einem String befinden k”nnen. Sie werden aber nicht ausgegeben, ^0 sondern bewirken stattdessen verschiedenes. So wechselt \n in die ^0 erste Spalte der n„chsten Zeile. Man sagt, ein Zeilenvorschub werde ^0 ausgegeben. ^0 Es gibt noch mehr solche Escape-Sequenzen. Hier einmal ein paar von ^0 ihnen: ^1 \\ gibt Backslash auf dem Bildschirm aus ^1 \a l„át einen Beeper ert”nen ^1 \b Rckschritt (entspricht einem Druck auf Backspace) ^1 \" gibt Anfhrungszeichen aus ^1 \' gibt Hochkomma aus ^1 \f Seitenvorschub ^0 In der Online-Hilfe von Quick C findet ihr alle Escape-Sequenzen ^0 hbsch in einer Tabelle angeordnet. Ja, das war unser erstes Beispielprogramm! Super, findet ihr auch? Ja? Dann laát uns fortfahren! In der n„chsten Folge kommen die Grundlagen von Variablen. Um euch die Zeit bis dahin zu versáen, stelle ich euch noch einige Ausgabebefehle vor, die gr”átenteils Spezialit„ten von Quick C sind! Spezialit„ten werden brigens durch einen vorangehenden Unterstrich gekennzeichnet. Die Befehle (besser gesagt, Funktionen, denn in C gibt es, wie gesagt, nur Funktionen!) befinden sich alle in graph.h. ^1 +++ _setbkcolor +++ Damit w„hlt man die aktuelle Hintergrundfarbe. Als Parameter muá der dazu- geh”rige Farbcode angegeben werden. Er ist genauso wie in Basic. ^1 +++ _settextcolor +++ Damit w„hlt man die Textfarbe, ansonsten siehe oben. Das Dumme ist nur, daá _settextcolor keinen Einfluá auf printf hat :-(. Da ben”tigt man eine andere Textausgabefunktion, und zwar ^1 +++ _outtext +++ W„hrend man mit printf auch Variablen ausgeben, den Text formatieren und vieles mehr kann, lassen sich mit _outtext nur Strings ausgeben! Die Funktion _outtext entspricht also dieser einfachsten Form von printf, die wir heute besprochen haben. ^1 +++ _clearscreen +++ Diese Funktion mit dem unheimlich langen Namen dient dazu, den Bildschirm zu l”schen. Aber wartet nur, es kommt noch schlimmer! Es gengt n„mlich nicht, ^0 _clearscreen(); zu schreiben, sondern man muá ^0 _clearscreen(_GCLEARSCREEN); tippen, um den ganzen Bildschirm zu l”schen! Da ist doch ein CLS ala Basic viel einfacher! Right, aber wer sagt denn, daá man in C nicht auch einfach CLS schreiben k”nnte? Wie das geht, erfahrt ihr dann im Kapitel ber den Pr„prozessor :-)! Hey, was hat der Smiley hier verloren? Sorry, aber ich muáte einfach mal wieder smilen :-)). So, damit w„re ein kleiner Info-Text oder „hnliches kein Problem mehr! Hier ein kurzes Beispiel, das ihr beliebig ver„ndern k”nnt. ^0 // Funny Letters ^0 #include ^0 #include ^0 void main(void) ^0 { ^0 _setbkcolor(1); ^0 _clearscreen(_GCLEARSCREEN); ^0 printf("Hallo Freunde!"); ^0 printf("\a\a \b\b \b\b\a \b\b \b\b\a \b\b \b\b\a \b\b \b\b\a \b\b "); ^0 printf("Quick C!"); ^0 printf("\a\a"); ^0 } ^4Viel Spaá mit diesem "Kunstwerk"! Und immer daran denken: Mit den erlernten ^4Befehlen experimentieren! Euer The Real Adok. ^3PS: Dieser Kurs erscheint auch in der Digital Chat (ab Ausgabe #2, August 96). ^3 Ursprnglich wollte ich ihn auch nur in der DC ver”ffentlichen. Da aber ^3 einige Leser meinten, ich solle ihn auch im Hugi ver”ffentlichen, tue ich ^3 es nun. Bei diesem Anlaá habe ich den Kurs auch um meine Erfahrungen ^3 erweitert, die ich in der Zwischenzeit gemacht habe. Ich hoffe, daá nun ^3 alle Leser zufrieden sein werden ;-).