011
09.06.2006, 14:38 Uhr
ao
(Operator)
|
Zitat von Helmut: |
Es werdend zweimal Zeiger auf const char per Funktionsparameter übergeben und innerhalb der Funktion derefrenziert. Damit arbeiten dann die Preprozessormakros innerhalb der Funktion. Die Berechnungen erfolgen bevor compiliert wird. (= Preprozessor-Metaprogrammierung).Das geht nur wenn die Konstanten echte Konstanten im Sinne von C++ sind. In C kann man Variablen nur das const Attribut geben und es sind immer noch Variablen die im Speicher liegen, worauf der Preprozesseor vor der Compilierung nicht zugreifen kann. In C++ sind es echte Konstanten und der Zugriff vor der Compilierung ist möglich!
|
Der Preprozessor greift überhaupt nicht auf Variablen zu, der ersetzt nur einen Text (H2B) durch einen anderen (den obenstehenden bedingten Ausdruck). Und das *geht* vor der Kompilierung.
Die Funktion ist eine C-Funktion, weil sie nur Sprachmittel benutzt, die in C definiert sind.
Du kannst es leicht nachprüfen, indem du sie durch einen C-Compiler jagst. Es fehlen nur diese beiden Symbole:
C++: |
extern int errno; #define EILSEQ 1234 /* oder eine beliebige andere Nummer */
|
dann kompiliert es fehlerfrei.
ao |