Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Vorwort
Vorwort des Gutachters
1 Einstieg in C
2 Das erste Programm
3 Grundlagen
4 Formatierte Ein-/Ausgabe mit »scanf()« und »printf()«
5 Basisdatentypen
6 Operatoren
7 Typumwandlung
8 Kontrollstrukturen
9 Funktionen
10 Präprozessor-Direktiven
11 Arrays
12 Zeiger (Pointer)
13 Kommandozeilenargumente
14 Dynamische Speicherverwaltung
15 Strukturen
16 Ein-/Ausgabe-Funktionen
17 Attribute von Dateien und das Arbeiten mit Verzeichnissen (nicht ANSI C)
18 Arbeiten mit variabel langen Argumentlisten – <stdarg.h>
19 Zeitroutinen
20 Weitere Headerdateien und ihre Funktionen (ANSI C)
21 Dynamische Datenstrukturen
22 Algorithmen
23 CGI mit C
24 MySQL und C
25 Netzwerkprogrammierung und Cross–Plattform-Entwicklung
26 Paralleles Rechnen
27 Sicheres Programmieren
28 Wie geht’s jetzt weiter?
A Operatoren
B Die C-Standard-Bibliothek
Stichwort

Download:
- ZIP, ca. 10,6 MB
Buch bestellen
Ihre Meinung?

Spacer
<< zurück
C von A bis Z von Jürgen Wolf
Das umfassende Handbuch
Buch: C von A bis Z

C von A bis Z
3., aktualisierte und erweiterte Auflage, geb., mit CD und Referenzkarte
1.190 S., 39,90 Euro
Galileo Computing
ISBN 978-3-8362-1411-7
Pfeil 10 Präprozessor-Direktiven
Pfeil 10.1 Einkopieren von Dateien mittels »#include«
Pfeil 10.2 Makros und Konstanten – »#define«
Pfeil 10.2.1 Symbolische Konstanten mit »#define«
Pfeil 10.2.2 Makros mit »#define«
Pfeil 10.3 Bedingte Kompilierung
Pfeil 10.4 Vordefinierte Präprozessor-Direktiven (ANSI C)
Pfeil 10.5 Ersetzung eines Makroparameters durch einen String
Pfeil 10.6 »#undef« – Makronamen wieder aufheben
Pfeil 10.7 Ausgeben von Fehlermeldungen – »#error«
Pfeil 10.8 »#pragma«

In diesem Kapitel erfahren Sie einiges zum Präprozessor. Der Präprozessor ist ein Teil des Compilers, der noch vor der Übersetzung einige Änderungen am Quelltext vornimmt.

10 Präprozessor-Direktiven

Wenn in der Sprache C ein Programm übersetzt (kompiliert und gelinkt) werden soll, dann wird, bevor der Compiler den Quelltext verarbeitet, von einem besonderen Teil des Compilers – dem Präprozessor – ein zusätzlicher Übersetzungslauf durchgeführt. Bei Präprozessor-Direktiven steht immer das Zeichen # am Anfang der Zeile. Außerdem darf pro Zeile nur eine Direktive eingesetzt werden. Folgendes ist also nicht erlaubt:

#include <stdio.h>  #include <stdlib.h>

Kommentare hingegen dürfen sehr wohl hinter einer Direktive stehen:

#include <stdio.h>  /* Headerdatei für Standardfunktionen */

Die folgenden Arbeiten fallen für den Präprozessor neben der Quelltextersetzung ebenfalls an:

  • Stringliterale werden zusammengefasst (konkateniert).
  • Zeilenumbrüche mit einem Backslash am Anfang werden entfernt.
  • Kommentare werden entfernt und durch Leerzeichen ersetzt.
  • Whitespace-Zeichen zwischen Tokens werden gelöscht.

Des Weiteren gibt es Aufgaben für den Präprozessor, die vom Programmierer gesteuert werden können:

  • Header- und Quelldateien in den Quelltext kopieren (#include)
  • symbolische Konstanten einbinden (#define)
  • bedingte Kompilierung (#ifdef, #elseif, ...)

Auf die Präprozessor-Direktiven, die Sie als Programmierer selbst steuern können, gehe ich auf den folgenden Seiten ein.


Galileo Computing - Zum Seitenanfang

10.1 Einkopieren von Dateien mittels »#include« topZur vorigen Überschrift

Die Direktive #include kopiert andere, benannte (Include-)Dateien in das Programm ein. Meistens handelt es sich dabei um Headerdateien mit der Extension *.h oder *.hpp. Hier sehen Sie die Syntax der Präprozessor-Direktive include:

#include <header >
#include "header"

Der Präprozessor entfernt die include-Zeile und ersetzt diese durch den Quelltext der include-Datei. Der Compiler erhält anschließend einen modifizierten Text zur Übersetzung.

Natürlich können Sie damit eigene Headerdateien schreiben und diese einkopieren lassen. Sie haben beispielsweise eine Headerdatei geschrieben und diese im Verzeichnis /HOME/MYOWNHEADERS unter dem Namen meinheader.h gespeichert. Dann müssen Sie diese Headerdatei am Anfang des Quelltextes mit

#include "/home/myownheaders/meinheader.h"

einkopieren. Dabei muss dasjenige Verzeichnis angegeben werden, in dem die Headerdatei gespeichert wurde. Steht die Headerdatei hingegen zwischen eckigen Klammern (wie dies bei Standardbibliotheken meistens der Fall ist), also so:

#include <datei.h>

so wird die Headerdatei datei.h im implementierungsdefinierten Pfad gesucht. Dieser Pfad befindet sich in dem Pfad, in dem sich die Headerdateien Ihres Compilers befinden.

Steht die Headerdatei zwischen zwei Hochkommata, also so:

#include "datei.h"

so wird diese im aktuellen Arbeitsverzeichnis oder in dem Verzeichnis gesucht, das mit dem Compiler-Aufruf -I angegeben wurde – vorausgesetzt, Sie übersetzen das Programm in der Kommandozeile. Sollte diese Suche erfolglos sein, so wird in denselben Pfaden gesucht, als wäre #include <datei.h> angegeben.

Abbildung 10.1 zeigt die einzelnen Schritte, durch die aus dem Quellcode eine ausführbare Datei wird (von oben nach unten).

Abbildung 10.1 Von der Quelldatei zur ausführbaren Datei

Tabelle 10.1 enthält eine Übersicht der Standard-Headerdateien, die von ANSI C vorgeschrieben sind:


Tabelle 10.1 Übersicht der Standard-Headerdateien (C89)

Headerdatei Bedeutung
assert.h

Fehlersuche und Debugging

ctype.h

Zeichentest und Konvertierung

errno.h

Fehlercodes

float.h

Limits/Eigenschaften für Gleitpunkttypen

limits.h

Implementierungskonstanten

locale.h

länderspezifische Eigenschaften

math.h

mathematische Funktionen

setjmp.h

unbedingte Sprünge

signal.h

Signale

stdarg.h

variable Parameterübergabe

stddef.h

Standard-Datentyp

stdio.h

Standard-I/O

stdlib.h

nützliche Funktionen

string.h

Zeichenkettenoperationen

time.h

Datum und Uhrzeit


Beim C99-Standard (bzw. C95) sind dann noch folgende Headerdateien neu hinzugekommen (sie sind allerdings nicht in allen Compilern vorhanden):


Tabelle 10.2 Standard-Headerdateien, seit C99 vorhanden

Headerdatei Bedeutung
complex.h

komplexe Arithmetik (Trigonometrie etc.)

Fenv.h

Kontrolle der Gleitpunkzahlen-Umgebung

inttypes.h

für genauere Integertypen

iso646.h

alternative Schreibweisen für logische Operatoren; zur Verwendung von Zeichensätzen im ISO-646-Format (seit C95 vorhanden)

stdbool.h

boolesche Datentypen

stdint.h

ganzzahlige Typen mit vorgegebener Breite

tgmath.h

typengenerische Mathematik-Funktionen

wchar.h

Umwandlung von Strings in Zahlwerte für den erweiterten Zeichensatz; String- und Speicherbearbeitung für den erweiterten Zeichensatz; Ein- und Ausgabe für den erweiterten Zeichensatz (seit C95 vorhanden)

wctype.h

Zeichenuntersuchung für den erweiterten Zeichensatz (seit C95 vorhanden)




Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.






<< zurück
  
  Zum Katalog
Zum Katalog: C von A bis Z

 C von A bis Z
Jetzt bestellen


 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: Einstieg in C++






 Einstieg in C++


Zum Katalog: C++ von A bis Z






 C++ von A bis Z


Zum Katalog: C/C++






 C/C++


Zum Katalog: Shell-Programmierung






 Shell-Programmierung


Zum Katalog: Linux-UNIX-Programmierung






 Linux-UNIX-
 Programmierung


Zum Katalog: IT-Handbuch für Fachinformatiker






 IT-Handbuch für
 Fachinformatiker


Zum Katalog: Ubuntu GNU/Linux






 Ubuntu GNU/Linux


Zum Katalog: Coding for Fun







 Coding for Fun 


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo




Copyright © Galileo Press 2009
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de