In C / C ++ haben wir Präprozessordirektiven (siehe Titel der Frage). Was ist das Analogon von ihnen in der D-Sprache? Und wie erkennt man den Betriebssystemtyp (Windows, Linux, Mac OS X, FreeBSD, ...) und den Prozessortyp (z. B. 32 oder 64 Bit) zur Kompilierzeit?
#if condition
wird ersetzt durch static if(condition)
(mit viel mehr Zeit für die Kompilierung)
#ifdef ident
wird durch version(ident)
#define ident
wird durch version = ident
#define ident replacement
wird durch alias ident replacement
Weitere Informationen unter Ссылка und eine Liste von vordefinierte Version definiert
Update: Die beste Antwort ist bereits auf dlang.org: Ссылка .
D hat keinen Präprozessor. Stattdessen bietet es leistungsstarke Funktionen zur Evaluierung und Introspektion zur Kompilierungszeit.
Hier ist eine einfache Liste typischer C / C ++ nach D-Übersetzungen mit Links zu relevanten Dokumenten:
C / C ++ : #ifdef
, #ifndef
, #else
, #elif
D : version
[ Link ]
C / C ++ : #if <condition>
D : static if
[ Link ]
C / C ++ : #define
D : D-Translation hängt vom Fall ab.
Einfache C / C ++ Definition wie #define FOO
wird in Ds " Version " übersetzt. Beispiel: version = FOO
Code wie #define BAR 40
wird in den folgenden D-Code übersetzt: enum BAR 40
oder in seltenen Fällen müssen Sie alias
verwenden.
Komplexe definiert wie #define GT_CONSTRUCT(depth,scheme,size) \
((depth) | (scheme) | ((size) << GT_SIZE_SHIFT))
werden in D-Vorlagen übersetzt:
C / C ++ : #undef
D Es gibt keine angemessene Übersetzung, die ich kenne
Dies könnte in Bezug auf Präprozessordirektiven in C vs D von Nutzen sein: Ссылка
In Bezug auf die Erkennung von Betriebssystem und Prozessortyp sieht dieser Thread so aus, als könnte er Ihre Fragen beantworten: Ссылка
Hinweis: Ich bin vertraut mit C / C ++ aber nicht D. Wenn meine Antwort nicht ausreicht, lassen Sie es mich wissen, damit ich es ändern kann. Hoffentlich habe ich dich in die richtige Richtung gezeigt.
Tags und Links d preprocessor