Was sind Analoga von "#ifdef", "#ifndef", "#else", "#elif", "#define", "#undef" in D-Programmierung?

7

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?

    
user1742529 04.07.2014, 21:34
quelle

3 Antworten

7

#if condition wird ersetzt durch static if(condition) (mit viel mehr Zeit für die Kompilierung)

#ifdef ident wird durch version(ident)

ersetzt

#define ident wird durch version = ident

ersetzt

#define ident replacement wird durch alias ident replacement

ersetzt

Weitere Informationen unter Ссылка und eine Liste von vordefinierte Version definiert

    
ratchet freak 04.07.2014, 21:55
quelle
8

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:

%Vor%

( Beispiel aus dem D Wiki )

C / C ++ : #undef

D Es gibt keine angemessene Übersetzung, die ich kenne

    
DejanLekic 05.07.2014 11:39
quelle
3

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.

    
EmmaGamma 04.07.2014 21:54
quelle

Tags und Links