001
13.06.2005, 15:54 Uhr
virtual
Sexiest Bit alive (Operator)
|
Naja, in C gibt es eben die One-Definition-Rule, die eben besagt, daß man Funktionen (aber auch alles andere) nur einmal definieren darf. Zwar kann man das dahingehend relativieren, daß diese Regel nicht für inline Funktionen bzw. Templates nicht gilt (diese müssen sogar im Header definiert werden), aber es ist gewiss keine Lösung, nun alle Funktionen inline zu machen.
Überhaupt wäre es keine Lösung, alles in einem header zu definieren, weil dadurch die Übersetzungskosten explodieren würden.
Üblicherweise geht man hin und schreibt daher einfach nur Header, die die Deklarationen enthalten und baut aus den Funktionsdefinitionen dann eine Library, welche man beim Bauen dazulinkt.
Beispielsweise könnte es ja sein, daß Du eine Primzahlberechnungsroutine geschrieben hast:
C++: |
// prime.c bool isPrime(unsigned long n) { if (n>4 && n%2) { for(unsigned i=3; i*i<=n; i += 2) { if (n%i==0) return false; } return true; } else { return n==2 || n==3; } }
|
Was man nun macht ist eigentlich ganz simpel: man geht hin, kompiliert diese (.c) Datei, ggf macht man eine Library draus. Damit ist die Datei schon mal wiederverwendbar. Damit man sie nutzen kann, macht man noch einen Header, der aber nicht die Definition, sondern nur die Deklaration enthält:
C++: |
// prime.h #ifndef PRIME_H_INCLUDED #define PRIME_H_INCLUDED
extern bool isPrime(unsigned long); #endif
|
Anwenden kann man es dann intuitiv:
C++: |
#include "prime.h"
... if (isPrime(4711) { ... }
|
-- Gruß, virtual Quote of the Month Ich eß' nur was ein Gesicht hat (Creme 21) |