C/C++ Programmierung

Ähnliche Dokumente
Proseminar. C-Programmierung Grundlagen und Konzepte. Der Präprozessor. von: Svenja Neef

FACHHOCHSCHULE MANNHEIM

C - PRÄPROZESSOR. Seminar effiziente C Programmierung WS 2012/13. Von Christian Peter

Einführung Makros Includes Errors und Warnings Pragmas Diverses. Der C-Präprozessor. Lukas Stabe. Universität Hamburg

Programmierung mit C Modularisierung von Programmen. Präprozessor-Anweisungen nutzen.

Präprozessor und make. einfache Makros Makros nehmen eine Textersetzung vor. Erst nach der Ersetzung muss gültiger C-Code vorliegen.

C/C++-Programmierung

Algorithmus: Kochrezept

Der C-Präprozessor. Lukas Stabe

Technisches Programmieren in C++

Einheit Lexikalische Grundlagen der Programmiersprache C Lexikalische Einheiten

Programmieren in C. Macros, Funktionen und modulare Programmstruktur. Prof. Dr. Nikolaus Wulff

Compiler Präprozessor Header Files

Vorlesung Informatik I

Berichte aus der Informatik. Dieter Pawelczak. Start in die C-Programmierung

Propädeutikum. Dipl.-Inf. Frank Güttler

Compiler Präprozessor Header Files

Beispiel. Problem: mehrteilige Nachnamen (von Goethe, Mac Donald, Di Caprio)

8.1 Vom Quellcode zur ausführbaren Programm

Programmiersprachen Einführung in C

Teil II. Literatur zur C-Programmierung:

C- Kurs 06 Übersetzung & Module

Globale Variablen Diverses. Globale Variablen. Globale Variablen

Informatik I: Einführung in die Programmierung 3. Werte, Typen, Variablen und Ausdrücke

C-Programmierung lernen

Systemprogrammierung

Syntax und Kontrollstrukturen

javascript Coding-Guidelines 2. Ausgabe Februar 2015 Der Guideline beschreibt den verwendeten Coding-Stil von javascript als eigene Richtline.

Hallo Haskell. Funktionale Programmierung. Prof. Dr. Oliver Braun Letzte Änderung: :06. Hallo Haskell 1/23

C++ - Einführung in die Programmiersprache Header-Dateien und Funktionen. Leibniz Universität IT Services Anja Aue

Objektorientierung: Klassen und Objekte

Inhalt. 1 Einstieg in die Welt von C Erste Schritte in C 31. Vorwort... 15

C++ Klassen, Vererbung. Philipp Lucas. Sebastian Hack. Wintersemester 2008/09. saarland.

Vorlesung Informatik I

C/C++ Programmierung

Grundlagen der Informatik 12. Strukturen

Unterlagen. CPP-Uebungen-08/

Inhaltsverzeichnis. Vorwort.11

Bash-Skripting Linux-Kurs der Unix-AG

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 29

Übersicht. C Modularisierung. Präprozessor, Compiler, Linker. Präprozessor, Compiler, Linker. Präprozessor, Compiler und und Linker Linker

C/C++ Programmierung

Compiler und Präprozessor (1) Erstellen eines Projektes

Informatik I. Übung 2 : Programmieren in Eclipse. 5. März Daniel Hentzen

Kurzeinführung in C/C++ Informationsquellen: - Webseite zur Vorlesung, Abschnitt Informationen zu C und C++ Einleitung

Einführung in die Programmiertechnik

Zeichenketten (1) Literale von Zeichenketten werden in doppelte Anführungszeichen gesetzt

Der C Präprozessor. Inhaltsverzeichnis. von Christian Peter 31. März Denition 3. 2 Funktionsweisen 3

Angewandte Mathematik und Programmierung

FLEX - Einleitung. Ausführbares Programm lexer. C-Programm lex.yy.c. flex-programm tiger.lex. WS 02/03 Übung Compilerbau Seifert, A.

Grundlagen der Informatik

Peter Prinz Ulla Kirch-Prinz C+ + Lernen und professionell anwenden. ffl mitp

ATM18-Projekt Arbeiten mit CodeVisionAVR C-Compiler Teil 04 - Der Preprozessor

5.3 Auswertung von Ausdrücken

Einleitung Entwicklung in C Hello-World! Konstrukte in C Zusammenfassung Literatur. Grundlagen von C. Jonas Gresens

Einstieg in die Informatik mit Java

ISO-SiMMlarcl. als erste Programmiersprache. Von Prof. Dr. Joachim Goll Uwe Grüner Prof. Herbert Wiese 2., durchgesehene Auflage

Programmierrichtlinien für C/C++

Bash-Skripting Linux-Kurs der Unix-AG

C/C++-Programmierung

Intensivübung zu Algorithmen und Datenstrukturen

Systempraktikum im Wintersemester 2009/2010 (LMU): Vorlesung vom Foliensatz 2

Hochschule Darmstadt Informatik-Praktikum WS 2017/2018 WIng Bachelor 6. Aufgabenblatt Zeiger, verkettete Liste, Dateieingabe und -ausgabe

Transkript:

1 C/C++ Programmierung Grundlagen: Der Präprozessor Sebastian Hack Christoph Mallon (hack mallon)@cs.uni-sb.de Fachbereich Informatik Universität des Saarlandes Wintersemester 2009/2010

2 Der Präprozessor 6.10 Einfaches Textersetzungssystem Läuft vor eigentlicher Übersetzung Präprozessordirektiven beginnen mit # Muss erster nicht-leerraum in der Zeile sein Enden mit dem Zeilenende Können mit \ als letztes Zeichen der Zeile auf nächste Zeile ausgedehnt werden Einsatzzwecke: Konfiguration (z.b. Debugausgaben) und Anpassungen an Plattformen

3 Nulldirektive # Tut nichts

4 #include 6.10.2 # include <name > # include " name " Ersetzt Direktive durch Inhalt der benannten Datei Wo die Dateien gesucht werden in beiden Varianten implementierungsabhängig <> üblicherweise Systemheader "" üblicherweise Header des Projekts Ist rekursiv anwendbar

5 #error 6.10.5 # error Beliebige Nachricht Gibt die Meldung auf der Fehlerausgabe aus Beendet die Übersetzung mit Fehler Häufige Erweiterung: #warn

6 #if 6.10.1 # if expression # else # endif Rechnen nur mit Zahlen mit den üblichen Operatoren Kein sizeof, Kommaoperator, Zuweisungen, Funktionsaufrufe Neuer Operator: defined X Ist genau dann 1, wenn das Makro X definiert ist, sonst 0 Optional mit Klammern: defined(x) #ifdef X Abkürzung für #if defined X #ifndef X Abkürzung für #if!defined X #else optional #elif Abkürzung für #else gefolgt von #if

7 Beispiel # if defined FreeBSD # include < stdlib.h > # elif defined linux defined _WIN32 # include < malloc.h > # else # error Sorry, your platform is not supported # endif # if defined DUTCH + defined ENGLISH + \ defined FRENCH + defined GERMAN!= 1 # error You must choose exactly one language # endif

8 #define: Objektartige Makros 6.10.3 # define NAME Ersetzung Ersetzt alle Vorkommen von NAME (ein Bezeichner) durch Ersetzung (beliebig viele Token) insbesondere auch leere Eresetzung Ersetzung kann wiederum Makros enthalten, die ausgewertet werden Werden bei der Verwendung ausgewertet Ersetzung nicht selbstrekursiv Konvention: Makronamen komplett in GROßBUCHSTABEN mit Unterstrichen Früher: Zur symbolischen Benennung von Konstanten Wird bei globaler Initialisierung immernoch benötigt (nicht C++)

9 #define: Funktionsartige Makros # define NAME (arg0,...) Ersetzung Kein Leerzeichen zwischen NAME und ( sonst objektartiges Makro Ersetzt NAME(...) durch Ersetzung, alle Argumente werden eingesetzt Früher: Offener Einbau von Programmstücken

10 Funktionsartige Makro und Seiteneffekte # define MIN (a, b) ((a) < (b)? (a) : (b)) // Verwendung : MIN (++i, 0) // Ersetzung : ((++ i) < (0)? (++ i) : (0)) Falle: ++i wird (evtl.) zweimal ausgewertet!

11 #undef # undef NAME Löscht das Makro NAME

12 Vordefinierte Makros DATE : Datum der Übersetzung TIME : Zeitstempel der Übersetzung STDC : Wert 1, um eine konforme Implementierung anzuzeigen FILE : Name der aktuellen Datei LINE : Aktuelle Zeilennunmmer Datei und Zeile mit #line manipulierbar: # line 666 " nirgendwo " Kommt bei Programmgeneratoren zum Einsatz

13 #-Operator # define STRINGIFY (x) #x // Verwendung : M( hello world ) // Ersetzung : " hello world " Wandelt Makroargument in Zeichenkettte um

14 Beispiel: assert() # undef assert # ifdef NDEBUG # define assert ( x) (( void )0) # else # define assert (x) ((x)? (( void )0) : \ assert (#x, FILE, LINE )) # endif /usr/include/assert.h assert() ist externe Funktion, die die Bedingung, Datei und Zeile ausgibt sowie den Programmlauf abbricht

15 Falle: Klammerung # define SIX 1 + 5 # define NINE 8 + 1 # define ANSWER SIX * NINE

15 Falle: Klammerung # define SIX 1 + 5 # define NINE 8 + 1 # define ANSWER SIX * NINE Antwort: 42