Das ATOS-Magazin
 
  zurück zum News-Archiv
Anfang zurück vorwärts Ende

15.06.2001

ANSI C

Ein Programmierkurs in mehreren Teilen - Teil I

Von Michael Bernstein

Herzlich willkommen zum C-Kurs für die ATOS!

Das Ziel des Kurses ist lediglich ANSI C. Die Programmierung von GEM oder spezieller Atari-Hardware wird hier nicht behandelt. Dies würde zum einen den Rahmen des Kurses sprengen, zum anderen ist für die GEM-Programmierung schon ein gewisses Maß an C-Kenntnissen erforderlich.

Warum nun gerade C, wo doch mittlerweile Java und C++ in aller Munde sind?

Im Gegensatz zu Java existiert C auch für Atari-Computer. C setzt weniger Anforderungen an die Leistung der Hardware als die weiterführenden Konzepte von C++ und Java voraus. Auch embedded systems (die berühmte Kaffeemaschine) werden nicht mit Java programmiert, um nicht einen 500-MHz-Pentium reinzustecken. Da sitzen durchaus noch 8-Bit-Mikrocontroller drin.

Die für Java vielgepriesene Portierbarkeit spielt für solche Geräte sowieso keine Rolle - wer möchte schon die Steuerung für seine Kaffeemaschine als Betriebssystem auf seinem PC laufen lassen - Kaffee kochen kann er sowieso nicht.

Außerdem ist der Zugriff auf die spezielle Hardware nötig. Deshalb kommt man mit Java allein nicht weiter. Auch hierfür eignet sich C deutlich besser.

C ist eine universelle Programmiersprache, die nicht an spezielle Aufgabenstellungen gebunden ist. C-Compiler erzeugen recht schnelle Programme und auch hardwarenahes Programmieren ist möglich, wie z.B. die in C geschriebenen Betriebssysteme (UNIX, TOS) zeigen.

ANSI C ist normiert, und bei Beachtung einiger Regeln lassen sich die Programme leicht auf andere Plattformen portieren. Leider hat diese schöne Eigenschaft ein paar Haken: Die Programmierung einer grafischen Oberfläche oder der Zugriff auf Hardware (auch schon serielle Schnittstellen!) gehören nicht zur ANSI-Norm. Damit lassen sich nur Programme leicht portieren, die über die Tastatur bedient werden. Eine gute Aufteilung der Programme kann aber auch solche Portierungen erleichtern.

Der Sprachumfang von C ist Bestandteil des Sprachumfangs von C++. Damit könnte ein C++-Kurs auf einen C-Kurs aufbauen. Es gibt aber auch die Meinung, dass Kenntnisse in C es erschweren, objektorientiertes Programmieren zu erlernen.

C ist eine kleine Sprache, die nur aus relativ wenig Sprachelementen besteht und damit leicht zu lernen ist. Die Anwendung von Zeigern ist aber dennoch eine kleine Hürde für einen Programmieranfänger. ANSI C enthält im Sprachumfang noch eine umfangreiche Sammlung von Bibliotheken.

Der Kurs

Der Kurs ist so aufgebaut, dass er auch für Anfänger geeignet ist, die noch keine Programmiersprache beherrschen. Das Beispiel, das im Rahmen des Kurses entwickelt wird, dient dazu, den Cookie-Jar auszulesen und die Informationen anzuzeigen. Damit ist auch der Bezug zu Atari-Computern hergestellt ;-). Das Beispiel ist aber auch nicht auf andere Computer portierbar. Umfangreichere Projekte würden nur den Blick auf das Wesentliche verdecken. Es ist jedem freigestellt, die Beispiele entsprechend zu modifizieren und weiterzuentwickeln, um eigene Vorstellungen zu verwirklichen.

Experten mögen mir verzeihen, dass ich an manchen Stellen zuerst einige Dinge vereinfache und eher lockere Erklärungen bevorzuge. Aber der Kurs wird in der Freizeit von den Teilnehmern verfolgt und Aktivitäten in der Freizeit sollten immer auch Freude machen.

Ich werde keine Übungsaufgaben stellen, da ich sehr ungern andere Menschen bewerten möchte. Auch ist es in einem Kurs in einem Magazin sehr unpraktisch, Lösungen der Teilnehmer zu besprechen. Es könnten nur Musterlösungen vorgestellt werden. Dafür werden Sie häufiger aufgefordert, einige Dinge selbst zu probieren. Dadurch gewinnt man Anschauung und Anschauung erleichtert das Verständnis. Wie man nun das technische Wissen über C in eine Lösung für ein konkretes Problem umsetzt, lernt man nur durch Übung. Dafür gibt es keine Richtlinien und das macht die Softwareentwicklung auch zu einem kreativen und anspruchsvollen Vorgang. Zu einem guten Programmierer gehört ein entsprechendes Wissen und Erfahrung, also auch Übung.

Geschichtliches

C wurde in den 70er Jahren auf und zusammen mit dem Betriebssystem UNIX entwickelt. Viele der wichtigen Ideen in C stammen von der Sprache BCPL, die Martin Richards entwickelt hat. BCPL beeinflusste C indirekt durch die Sprache B, die Ken Thompson 1970 für das erste UNIX-System auf der DEC PDP-7 implementiert hat.

Wer mehr über die Hintergründe der Entwicklung von C nachlesen möchte, sollte sich einmal die folgende Web-Page anschauen :-)
http://www2.informatik.uni-halle.de/lehre/pascal/sprache/humor_ix.html

Voraussetzungen

Es stellt sich zuerst die Frage, welches System geeignet ist. Bei den von mir genannten Compilern ist das jeder Atari, der mindestens 1 MB bzw. 2 MB RAM hat, je nach verwendetem Compiler. Alternativ kann auch ein ATARI-Emulator benutzt werden.

Welche Compiler gibt es?

Zum einen Turbo C bzw. dessen Nachfolger Pure C. Leider gibt es diesen Compiler nur noch gebraucht. Er lässt sich allerdings auch sehr gut auf einem ST mit 1 MB RAM einsetzen. Bevor ich mir eine Festplatte gekauft hatte, war er bei mir auf einer komprimierenden RAM-Disk installiert. So waren während der Arbeit keine weiteren Zugriffe auf Disketten erforderlich.

Sozobon C

Mit diesem Compiler habe ich noch keine Erfahrungen. Ich werde die Beispiele aber auch mit diesem Compiler testen, weil er als Freeware verfügbar ist.

GCC

Für diejenigen mit dem besonderen Geschmack (oder nur masochistisch veranlagte?). Dieser Compiler arbeitet sehr gründlich. Oder sollte ich besser sagen, er ist nicht der schnellste? Er erzeugt aber dennoch guten Code. Auf einem normalen ST ist er mir allerdings zu langsam. Die aktuelle Version für Ataris ist die 2.95.2. Der Compiler wurde nur unter MiNT getestet, sollte aber auch unter MagiC laufen. Er benötigt ein Dateisystem mit langen Dateinamen. Der C-Compiler benötigt 4 MB freies RAM, der C++-Compiler 8 MB freies RAM. Auf der Festplatte benötigt der Compiler 10 MB; die MiNTLib 5 MB und die binutils nochmals 5 MB. Mit weiteren Utilities wie make, fileutils, sh-utils werden ca. 30 MB benötigt. Es empfiehlt sich deshalb ein Atari ab TT aufwärts, Falcon mit Beschleuniger, ST mit PAK/FRAK, Hades, Milan. Da es recht leicht möglich ist, denn gcc als Crosscompiler zu bauen, lässt sich auch ein aktueller PC verwenden, um für den Atari Programme zu übersetzen. Für diejenigen mit kleineren Ataris, die den gcc testen wollen, habe ich die Version 2.5.8 zur Verfügung gestellt. Diese Version ist zwar älter, sie gibt sich aber noch mit 2 MB RAM zufrieden, wenn man kleinere Programme übersetzt. Ich habe ihn auf einem ST mit 2,5 MB und einer grafischen Shell getestet. Mein Archiv hat zusätzlich den Vorteil, dass es komplett ist, also auch den C++-Compiler enthält. Dies war leider auch nicht bei jeder Quelle gegeben. Zum Teil fehlten Teile des C++-Compilers, z.B. die Libs oder der Compiler selbst. Dieser Compiler kann nur mit einer Festplatte sinnvoll betrieben werden.

Mit weiteren Systemen habe ich keine Erfahrung. Die Beispiele werde ich mit jedem der oben genannten Compiler testen.

Wo gibt es die Entwicklungssysteme?

Eine Beschreibung des MausNet findet sich im WWW unter http://www.hoffart.de/maus.html

Was muss gesaugt werden?

Wird eine andere Version benutzt, können die Namen und auch die Aufteilung auf Archive abweichen. Diese Aufstellung bezieht sich auf die Version 2.0 des Sozobon bzw. 2.5.8 des GCC in den oben genannten Quellen. Auch wenn ich unten zu Archiven schreibe, dass sie nicht unbedingt nötig sind, sollte man sich die Entwicklungsumgebungen komplett holen. Es könnten Teile später benötigt werden. Es ist aber nicht erforderlich, diese Teile sofort zu installieren. Dazu gehört z.B. auch die Doku, die natürlich für den Kurs nicht unbedingt erforderlich, aber manchmal sehr hilfreich ist.

Sozobon

Ein Stern in der Spalte n kennzeichnet die unbedingt notwendigen Archive.

Archivname n Inhalt
fplib20.lzh   Bibliothek für FPU-Nutzung
jas2x9.lzh   Assembler
mntsox46.zoo   MiNT-Lib, Alternative zur Standardlib
scbin20.lzh * Compiler, Version 2.0
scdoc20.lzh   Dokumentation des Systems
scsrc20.lzh   Quellcode des Systems
sozbin15.zoo   Compiler, Version 1.5
sozc6844.lzh   Portierung des c68 Compilers
sozlib15.zip * Bibliotheken
sozuti09.zip * enthält weitere Hilfsprogramme, auch make
szadb21b.zoo   ein Assembler-Debugger für Sozobon C

GCC

Beim GCC muss man entscheiden, welche Bibliotheken man installiert. Es gibt zum einen die Standard-Lib von GNU, die für diesen Kurs völlig ausreichend ist. Zum anderen gibt es noch die MiNT-Libs, die bei installiertem MiNT auch dessen Möglichkeiten ausnutzen können. Die mit den MiNT-Libs gelinkten Programme laufen aber auch problemlos unter TOS. Probleme gibt es nur, wenn man die speziellen Möglichkeiten von MiNT auch ausnutzt. Wenn z.B. Multitasking nötig ist, ...

Ein Stern in der Spalte n kennzeichnet die unbedingt notwendigen Archive.

Archivname n Inhalt
gcc258ba.zoo * Compiler, ... Teil 1
gcc258bb.zoo * Compiler, ... Teil 2
0readme   eine Kurzinstallationsanleitung
asmtrans.ttp    
gccman.zoo   die Hilfe
genmagic.ttp    
make.ttp * nötig, für Projekte mit mehreren Dateien
mkptypes   Tool, generiert Prototypen aus C Dateien
utlbin38.zoo * Tools, Linker, ...
gemolb30.zoo   GEM-Lib V3.0
includ97.zoo * Include-Dateien
libolb97.zoo * Standard-Bibliotheken
gemlib30.zoo   Quellen der GEM-Lib V3.0
libsrc97.zoo   Quellen der Standard-Bibliothek
pmllib21.zoo   Quellen einer portablen Mathematikbibliothek
pmlolb21.zoo   eine portable Mathematikbibliothek
crsdoc16.zoo   Doku einer Lib für Textbildschirmsteuerung
crslib16.zoo   eine Lib für Textbildschirmsteuerung
crsolb16.zoo   eine Lib für Textbildschirmsteuerung
crssrc16.zoo   Quellen einer Lib für Textbildschirmsteuerung
geminc31.tgz   Includedateien der GEM-Lib V3.1
gemolb31.tgz   GEM-Lib V3.1
gempc31.tgz   GEM-Lib V3.1
gemsrc31.tgz   Quellen der GEM-Lib V3.1
g++20o22.zoo   Bibliothek für C++
g++lib22.zoo   Bibliothek für C++
g++olb22.zoo   Bibliothek für C++
g++inc22.zoo   Includedatein für C++ Bibliothek
g+libt02.zoo   Bibliothek für C++
gdbm171.zoo   Debugger
gprof08b.zoo   Profiler
mntlib46.tgz   Quellen einer alternativen Standardbibliothek
mntolb46.tgz   eine alternative Standardlib
mlib46d.tgz   eine alternative Standardbibliothek
mntc6846.zoo   eine alternative Standardbibliothek
mntinc46.tgz   Includedatei einer alternativen Standardbibliothek
mntsox46.zoo   eine alternative Standardbibliothek
pcosbind.zoo    

Was fehlt noch?

Um die Archive zu installieren, wird ein Packer benötigt. Verwendet wurden bei den Archiven zoo (Endung: .zoo), lharc bzw. lzhshell (.lzh), pkzip auf PC bzw. stzip auf Atari (.zip) und tar und gzip (.tgz).

Wer Sozobon oder GCC benutzt, benötigt noch einen Editor. Hier gibt es genug Auswahl. Schließlich ist das Schreiben eines Editors eines der drei Dinge, die ein Mann in seinem Leben machen sollte. Es gibt z.B. QED, Everest, 7up, Luna, ...

Für Sozobon und GCC ist ein Kommandozeileninterpreter (Shell) ganz praktisch. Es gibt z.B. die Mupfel, die zu Gemini gehört, Gulam oder unter MiNT auch die bash.

Sowohl für Sozobon als auch für den GCC gibt es auch noch Shells, die eine IDE (GEM-Oberfläche für die Entwicklung) zur Verfügung stellen. Dies wären für Sozobon CDESK als Shareware. Für den GCC gibt es die Gnushell oder Agnus, beide ebenfalls Shareware.

Wer ein älteres TOS (<1.06) einsetzt, das noch keinen Cookie-Jar anlegt, benötigt ein entsprechendes Programm. Ich habe mein Programm, das frei nach einem Artikel im Profibuch entstanden ist, auf meine Homepage (http://home.t-online.de/home/Michael_Bernstein/download/index.htm) gelegt.

Links auf einige der Tools, insbesondere die Packer und Editoren, finden sich z.B. auf der Downloadseite meiner Homepage (http://home.t-online.de/home/Michael_Bernstein/download/index.htm).

Literatur

Ich selbst habe kaum Literatur benutzt. Anfangs waren es das Skript zu einer Vorlesung und anschließend die Online-Hilfe. Deshalb kann ich keine Bewertung anbieten. Hier folgt dennoch eine kurze Liste:

  • Kernighan/Ritchie: Programmieren in C, Carl Hanser Verlag
    Dies ist der Klassiker schlechthin, schließlich sind die Autoren die Entwickler von C. Allerdings ursprünglich in einer Variante als K&R C, die meiner Meinung nach durch einen sehr laschen Syntax zu viele Fehlermöglichkeiten offenlässt.
  • C-FAQ aus dem Internet, z.B. unter http://www.hrz.uni-giessen.de/faq/archiv/c-faq.faq/

Im nächsten Teil werden die unterschiedlichen Entwicklungsumgebungen in Betrieb genommen (Turbo-C/Pure-C, Sozobon, GCC).

Michael Bernstein


Anfang zurück vorwärts Ende Seitenanfang

Copyright und alle Rechte beim ATOS-Magazin. Nachdruck und Veröffentlichung von Inhalten nur mit schriftlicher Zustimmung der Redaktion.
Impressum - Rückmeldung via Mail oder Formular - Nachricht an webmaster