Rheinwerk Computing < openbook > Rheinwerk 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

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
Rheinwerk Computing
ISBN 978-3-8362-1411-7
Pfeil 9 Funktionen
Pfeil 9.1 Was sind Funktionen?
Pfeil 9.2 Wozu dienen Funktionen?
Pfeil 9.3 Definition von Funktionen
Pfeil 9.4 Funktionsaufruf
Pfeil 9.5 Funktionsdeklaration
Pfeil 9.6 Lokale Variablen
Pfeil 9.7 Globale Variablen
Pfeil 9.8 Statische Variablen
Pfeil 9.9 Schlüsselwörter für Variablen – Speicherklassen
Pfeil 9.9.1 auto
Pfeil 9.9.2 extern
Pfeil 9.9.3 register
Pfeil 9.9.4 static
Pfeil 9.10 Typ-Qualifizierer
Pfeil 9.10.1 volatile
Pfeil 9.10.2 const
Pfeil 9.11 Geltungsbereich von Variablen
Pfeil 9.12 Speicherklassen-Spezifizierer für Funktionen
Pfeil 9.12.1 extern
Pfeil 9.12.2 static
Pfeil 9.12.3 volatile
Pfeil 9.13 Datenaustausch zwischen Funktionen
Pfeil 9.14 Wertübergabe an Funktionen (call-by-value)
Pfeil 9.15 Der Rückgabewert von Funktionen
Pfeil 9.16 Die Hauptfunktion »main()«
Pfeil 9.17 Rückgabewert beim Beenden eines Programms
Pfeil 9.17.1 Programmende auswerten
Pfeil 9.18 Funktionen der Laufzeitbibliothek
Pfeil 9.19 Getrenntes Kompilieren von Quelldateien
Pfeil 9.20 Rekursive Funktionen (Rekursion)
Pfeil 9.20.1 Exkurs: Stack
Pfeil 9.20.2 Rekursionen und der Stack
Pfeil 9.20.3 Fakultät
Pfeil 9.20.4 Fibonacci-Zahlen
Pfeil 9.20.5 Größter gemeinsamer Teiler (GGT)
Pfeil 9.21 »inline«-Funktionen


Rheinwerk Computing - Zum Seitenanfang

9.21 »inline«-Funktionen topZur vorigen Überschrift

inline-Funktionen sind dem C++-Programmierer ja bereits wohlbekannt und stehen mit dem C99-Standard auch dem C-Programmierer zur Verfügung. Um eine Funktion als inline-Funktion zu präsentieren, muss nur das Schlüsselwort inline vorangestellt werden:

/* inliner.c */
#include <stdio.h>
#include <stdlib.h>

static inline void xchange(int *z1, int *z2) {
   int tmp;

   tmp  = *z2;
   *z2  = *z1;

   *z1  = tmp;
}

static inline void print(int *z1, int *z2) {
   printf("%d :: %d\n", *z1, *z2);
}

int main(void) {
   int zahl1 = 123, zahl2 = 321;

   print(&zahl1, &zahl2);
   xchange(&zahl1, &zahl2);
   print(&zahl1, &zahl2);
   return EXIT_SUCCESS;
}

inline-Funktionen stellen eine sinnvolle Alternative zu parametrisierten define-Makros da. Der Code einer inline-Funktion wird vom Compiler direkt an der Stelle eingefügt, wo der Aufruf stattfindet. Damit entfällt der Sprung in ein Unterprogramm. Das heißt, die Sicherung der Rücksprungadresse, der Sprung zur Funktion und nach der Ausführung der Sprung zurück zur gespeicherten Rücksprungadresse entfallen. Dadurch ist die Ausführung einer inline-Funktion genauso schnell, als würde der Code direkt an der Stelle eingefügt.

Die inline-Funktionen sollten aber möglichst klein gehalten werden. Werden zu viele Anweisungen verwendet, kann der Compiler das Schlüsselwort inline auch ignorieren und es als eine normale Funktion behandeln. Das Schlüsselwort inline ist nämlich für den Compiler nur ein Hinweis und kein Befehl. Wann der Compiler eine Funktion als inline behandelt und verwendet, entscheidet dieser selbst.

Dass im Listing die inline-Funktion mit dem Spezifizierer static deklariert wurde, liegt daran, dass die Definition einer inline-Funktion in der Übersetzungseinheit vorhanden sein muss, wo diese verwendet wird. Der Nachteil an der inline-Funktion, die mit static deklariert ist, ist, dass Sie hierbei keine veränderbaren Speicherobjekte mit statischer Lebensdauer verwenden können.

In der Praxis wird daher die Deklaration (!) einer inline-Funktion in eine externe Headerdatei ohne inline geschrieben und zusätzlich mit dem Schlüsselwort extern versehen, um so der kompletten Übersetzungseinheit zur Verfügung zu stehen, die diese Headerdatei inkludiert.

/* inline.h */
#ifndef INLINE_H
#define INLINE_H
extern void xchange(int *z1, int *z2);
extern void print(int *z1, int *z2);

#endif

Jetzt können Sie auch die inline-Funktionen wie gewöhnliche Funktionen verwenden:

/* inliner2.c */
#include <stdio.h>
#include <stdlib.h>
#include "inline.h"

inline void xchange(int *z1, int *z2) {
   int tmp;

   tmp  = *z2;
   *z2  = *z1;
   *z1  = tmp;
}

inline void print(int *z1, int *z2) {
   printf("%d :: %d\n", *z1, *z2);
}

int main(void) {
   int zahl1 = 123, zahl2 = 321;

   print(&zahl1, &zahl2);
   xchange(&zahl1, &zahl2);
   print(&zahl1, &zahl2);
   return EXIT_SUCCESS;
}



Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen. >> Zum Feedback-Formular
<< 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: C/C++






 C/C++


Zum Katalog: Einstieg in C






 Einstieg in C


Zum Katalog: Schrödinger programmiert C++






 Schrödinger
 programmiert C++


Zum Katalog: C++ Handbuch






 C++ Handbuch


Zum Katalog: IT-Handbuch für Fachinformatiker






 IT-Handbuch für
 Fachinformatiker


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo




Copyright © Rheinwerk Verlag GmbH 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.


[Rheinwerk Computing]

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de