2 Compiler-Informationen


2.1 Wie erzeuge ich ein Programm?
2.1.1 MS-DOS System
2.2.2 UNIX System
2.2 Aufruf und Umgang mit dem Compiler in den Übungen
2.3 INCLUDE-Dateien und Bibliotheksfunktionen von C


Dieses Kapitel ist das einzige Kapitel, das sich notwendigerweise auf einen bestimmten Rechner und sogar auf einen bestimmten C-Übersetzer beziehen muß, da die Bedienung der einzelnen C-Übersetzer sehr unterschiedlich sein kann. Wir werden hier auch nur C-Compiler betrachten und uns nicht mit C-Interpretern beschäftigen, bei denen die Programmerzeugung etwas anders aussieht.


2.1 Wie erzeuge ich ein Programm?

Der grundsätzliche Weg von der Idee zum lauffähigen Programm kann so gekennzeichnet werden:


  Editor ---> C-Compiler ---> Linker ---> Programm

Mit dem Editor wird eine Quellencodedatei erzeugt, die vom C-Compiler in eine Objektdatei übersetzt wird. Aus dieser erzeugt der Linker unter Verwendung der C-Bibliothek dann das lauffähige Programm. Oftmals sind die Funktionen von Compiler und Linker in einem Programm zusammengefaßt.

2.1.1 MS-DOS System

Auf einem MS-DOS System gibt es z.B. die Editoren bzw. Textverarbeitungsprogramme EDLIN, EDIT und WORD. Der Compiler hat je nach Hersteller einen anderen Namen. Zum Linken wird meist der MS-DOS Linker verwendet. Die Dateinamen haben üblicherweise folgende Dateinamenergänzungen:


  .c    für den Quellencode
  .h    für Include-Dateien
  .obj  für den Objektcode
  .exe  für das lauffähige Programm

Mit dem Aufkommen von Programmierumgebungen für PCs (Zorlite C, Microsoft C und Turbo C) hat der Benutzer eine komfortable Umgebung zur Erzeugung und zum Austesten von Programmen. Sie sind (fast) selbsterklärend und arbeiten mit Pull-Down-Menüs. Weiterhin verfügen diese Umgebungen über einen integrierten Editor und eine On-Line-Hilfe-Funktion. Sie zeigen Syntaxfehler im Quellencode an. Dies ist insbesondere für Anfänger in der Programmiersprache C sehr wertvoll, da Fehler somit leicht gefunden werden. Meist verfügen Sie auch über einen Debugger, mit dem man das ablaufende Programme an beliebig wählbaren Stellen anhalten, Variablen abfragen und dann weiterlaufen lassen kann. Damit lassen sich auch Laufzeitfehler (insbesondere bei der Zeigerverarbeitung) aufspüren.

2.1.2 UNIX System

Auf einem UNIX System kann man als Editor z.B. vi, mg, emacs oder pine verwenden. Der C-Compiler schließt hier die Linkfunktion mit ein und heißt cc. Der Compiler entspricht meist der ANSI-Norm. Bekannt ist noch der für viele Systeme frei erhältliche GNU-C Compiler gcc. Die Dateinamen haben üblicherweise folgende Dateinamenergänzungen:


  .c    für den Quellencode
  .h    für Include-Dateien
  .o    für den Objektcode
  a.out für das lauffähige Programm

Die Bibliotheksdateien befinden sich meist im Verzeichnis /usr/lib und die Include-Dateien stehen in /usr/lib/include.

Auf einem UNIX System gibt es weiterhin einen C-Syntaxchecker. Dieses Programm heißt lint und erzeugt keinen Code, unterwirft das Quellenprogramm aber einer ausführlichen Syntaxanalyse, die der normale C-Compiler CC nicht bietet. Ein Programm, das von lint ohne Fehlermeldung bearbeitet wurde, kann als höchst portabel betrachtet werden. Schließlich gibt es, je nach System, auch eine symbolischen Debugger sdb oder dbx. Nähere Informationen zu cc, gcc, lint, dbx und sdb kann man auf einem UNIX System mit Hilfe des man-Kommandos erhalten.


2.2 Aufruf und Umgang mit dem Compiler in den Übungen

Der grundlegende Aufruf für den Compiler lautet:


  cc Dateiname.c

Damit wird das Quellenprogramm in der Datei "Dateiname.c" übersetzt und anschließend automatisch der Linker aufgerufen. Es entsteht im allgemeinen keine Objektdatei (mit der Dateinamenerweiterung .o) sondern nur das fertige Programm in der Datei a.out. Wandelt man den obigen Aufruf wie folgt ab:


  cc -o Dateiname1 Dateiname2.c

so wird das fertige Programm in die Datei "Dateiname1" geschrieben. Die Dateinamen "Dateiname1" und "Dateiname2" können auch gleich sein. Die Rechte zur Programmausführung für den Benutzer werden in beiden Fällen automatisch gesetzt.

Es empfiehlt sich, fertige Programme und Quellencodedateien in einem Unterverzeichnis des eigenen Home-Verzeichnisses aufzubewahren, damit man einen besseren Überblick behält.


2.3 INCLUDE-Dateien und Bibliotheksfunktionen von C

Wichtig zur Programmerzeugung sind weiterhin die C-Bibliothek und die Header-(Include-)Dateien. Deren Namen sind, da sie fast in jedem C-Programm benötigt werden, standardisiert. Ebenso natürlich die Namen der Bibliotheksfunktionen. Die folgenden Listen der Include-Dateien und der Bibliotheksfunktionen beziehen sich auf TURBO C 2.0. Sie werden hier angegeben, um Ihnen einen Gesamtüberblick zu geben. Viele Funktionen und Include-Dateien sind aber nicht bei allen C Compilern vorhanden (insbesondere natürlich nicht die MS-DOS spezifischen).

Hier sind zunächst die Include-Dateien aufgelistet. Das Hauptanwendungsgebiet der jeweiligen Include-Datei ist ebenfalls angegeben.


  alloc.h       Speicherverwaltung
  assert.h      Assert-Debugging-Makro
  bios.h        BIOS-Funktionen
  conio.h       Ein-/Ausgabe für die DOS-Konsole
  ctype.h       Zeichenklassifizierung und -umwandlung
  dir.h         Directory-Verwaltung
  dos.h         DOS-Funktionen
  errno.h       Mnemonics für Fehlercodes
  fcntl.h       Konstantendefinitionen für OPEN (von Dateien)
  float.h       Parameter für Gleitpunktroutinen
  io.h          Low-Level Ein-/Ausgaberoutinen
  limits.h      Informationen zu Grenzwerten versch. Parameter
  math.h        Mathematik-Funktionen
  mem.h         Speicher-Manipulations-Funktionen
  process.h     Prozeßverwaltung
  setjmp.h      Routinen für FAR-Sprünge
  share.h       Parameter für File-Sharing
  signal.h      Abfrage von Betriebssystem-Flaggs
  stdarg.h      Makros für variable Anzahl von Funktionsparametern
  stddef.h      Definition gebräuchlicher Datentypen und Makros
  stdio.h       Standard Ein-/Ausgabe
  stdlib.h      oft beötigte gebräuchliche Funktionen zur Umwandlung, 
		Suche und zum Sortieren von Daten
  string.h      Zeichenketten-Funktionen
  sys/stat.h    Symbolische Konstanten für Dateioperationen
  time.h        Zeit-Funktionen
  values.h      wichtige Konstanten einschließlich 
		Maschinenabhängigkeiten

Es folgt nun eine Liste der Bibliotheksfunktionen. Sie sind zu Kategorien zusammengefaßt, um ein schnelleres Suchen nach einer Funktion für eine bestimmte Aufgabe zu ermöglichen. Manche Funktionen kommen mehrfach vor, da sie verschiedenen Kategorien zugeordnet werden können. Die Kategorien sind alphabetisch geordnet; ebenso die Funktionsnamen innerhalb der einzelnen Kategorien.

Die Funktionsnamen geben oft schon einen Hinweis auf ihre Funktion. Weitergehende Informationen erhält man durch das Schreiben des Namens der Funktion, Positionieren des Cursors auf diesen Namen und die Anfrage nach Syntaxhilfe (Funktionstaste LOOKUP). Eine ausführliche Beschreibung der Funktionen findet man im Referenzhandbuch für den jeweiligen Compiler.

Diagnose-Routinen (Prototypen in assert.h, math.h und errno.h)


  assert matherr perror

Directory-Routinen (Prototypen in dir.h)


  chdir findfirst findnext fnmerge fnsplit getcurdir
  getcwd getdisk mkdir mktemp rmdir searchpath
  setdisk

Ein-/Ausgabe-Routinen (Prototypen überwiegend in stdio.h und io.h, aber auch in conio.h und signal.h)


  access cgets chmod _chmod clearerr _close
  close cprintf cputs creat _creat creatnew
  creattemp dup dup2 eof fclose fcloseall
  fdopen feof ferror fflush fgetc fgetchar
  fgets filelength fileno flushall fopen fprintf
  fputc fputchar fputs fread freopen fscanf
  fseek ftell fwrite getc getch getchar
  getche getftime getpass gets getw gsignal
  ioctl isatty kbhit lock lseek _open
  open perror printf putc putch putchar
  puts putw read _read remove rename
  rewind scanf setbuf setftime setmode setvbuf
  sopen sprintf sscanf ssignal strerror tell
  ungetc ungetch unlock vfprintf vfscanf vsprintf
  vsscanf _write write

Interface-Routinen für DOS, BIOS und 8086 (Prototypen überwiegend in dos.h, aber auch in bios.h)


  absread abswrite bdos bdosptr bioscom biosdisk
  biosequip bioskey biosmemory biosprint biostime country
  ctrlbrk disable dosexterr enable FP_OFF FP_SEG
  freemem geninterrupt getcbrk getdfree getdta getfat
  getfatd getpsp getvect getverify harderr hardresume
  hardretn inport inportb int86 int86x intdos
  intdosx intr keep MK_FP outport outportb
  parsfnm peek peekb poke pokeb randbrd
  randbwr segread setdta setvect setverify sleep
  unlink

Klassifizierungs-Routinen (Prototypen in ctype.h)


  isalnum isalpha isascii iscntrl isdigit isgraph
  islower isprint ispunct isspace isupper isxdigit

Konvertierungs-Routinen (Prototypen überwiegend in stdlib.h, einige auch in ctype.h)


  atof atoi atol ecvt fcvt gcvt
  itoa ltoa strtod strtol toascii _tolower
  tolower _toupper toupper uitoa

Mathematik-Routinen (Prototypen überwiegend in math.h, aber auch in float.h und stdlib.h)


  abs acos asin atan atan2 atof
  atoi atol cabs ceil_ clear87 _control87
  cos cosh ecvt exp fabs fcvt
  floor fmod _fpreset87 frexp gcvt hypot
  itoa labs ldexp log log10 ltoa
  _matherr matherr modf poly pow pow10
  rand sin sinh sqrt srand _status87
  strtod strtol tan tanh uitoa

Prozeß-Routinen (Prototypen in process.h)


  abort execl execle execlp execlpe execv
  execve execvp execvpe _exit exit spawnl
  spawnle spawnlp spawnlpe spawnv spawnve spawnvp
  spawnvpe system

Sonstige-Routinen (Prototypen in setjmp.h)


  setjmp longjmp

Speicher-Verwaltungs-Routinen (Prototypen überwiegend in alloc.h, aber auch in stdlib.h und dos.h)


  allocmem brk calloc coreleft farcalloc farcoreleft
  farmalloc farrealloc free malloc realloc sbrk
  setblock

Standard-Routinen (Prototypen in stdlib.h)


  abort abs atexit atof atoi atol
  bsearch calloc ecvt _exit exit fcvt
  free gcvt getenv itoa labs lfind
  lsearch ltoa malloc putenv qsort rand
  realloc srand strtod strtol swab system
  uitoa

String- und Speicher-Manipulations-Routinen (Prototypen überwiegend in string.h, aber auch in mem.h)


  memcpy memchr memcmp memicmp memmove memset
  movebytes movedata movmem setmem stpcpy strcat
  strchr strcmp strcpy strcspn strdup strerror
  stricmp strlen strlwr strncat strncmp strncpy
  strnicmp strnset strpbrk strrchr strrev strset
  strspn strstr strtok strtol strtoul strupr

Zeit- und Datums-Routinen (Prototypen in time.h und dos.h)


  asctime ctime difftime dostounix getdate gettime
  gmtime localtime setdate settime stime tzset
  unixtodos 


zurück zum Inhaltsverzeichnis

 

11. November 1999, Peter Klingebiel, DVZ