Logische Verknüpfung von Präprozessoranweisungen

OP #1662887
Lesenswert?

Hallo,

ich möchte Präprozessoranweisungen logisch verknüpfen, so in etwa:

#ifdef A || ifdef B
machwas
#endif
...

so funktioniert es aber leider nicht, kann jemand sagen ob das logische 
Verknüpfen von Präprozessoranweisungen überhaupt funktioniert, wenn ja 
wie dann?

Dank Euch, Chris
Gast #1662903
Lesenswert?

Christian Besemann schrieb:
> ob das logische
> Verknüpfen von Präprozessoranweisungen überhaupt funktioniert

Nein.

Es ist aber möglich in der Bedingung von "#if" logische Verknüpfungen zu 
verwenden.
Gast #1663161
Lesenswert?

Mark Brandis schrieb:
> Ich versuche gerade den Sinn einer OR-Verknüpfung dieser Art zu
> verstehen. Wenn A und B z.B. durch Compiler-Defines zustande kommen,
> wozu dann zwei verschiedene Defines für den gleichen auszuführenden
> Code?

Stell dir einfach vor, du hast zwei Features deines Programms, die du 
durch bedingte Compilierung aktivieren können möchtest. Da kann es doch 
gut sein, daß es auch Codestellen gibt, die nur dann benötigt werden, 
wenn wenigstens eins der beiden aktiviert sind.

donald schrieb:
> Gibt es eigentlich irgend einen Grund, warum der C-Präprozessor so
> eingeschränkt ist? Schleifen sind ja beispielsweise auch nicht möglich.

Es wurde wohl nie als wichtig genug erachtet. Wenn du 
Compilezeit-Schleifen willst, mußt du C++ und template-Metaprogramming 
verwenden. Ok, sind eigentlich auch keine Schleifen, sondern Rekursion, 
aber zumindest geht sowas da.
#1663163
Lesenswert?

donald schrieb:

> Gibt es eigentlich irgend einen Grund, warum der C-Präprozessor so
> eingeschränkt ist? Schleifen sind ja beispielsweise auch nicht möglich.

Der Erfinder hielt mehr eben nicht für erforderlich.

Wer mehr wollte konnte schon bald auf den Präprozessor M4 ausweichen.
Moderator #1663564
Lesenswert?

donald schrieb:
> Gibt es eigentlich irgend einen Grund, warum der C-Präprozessor so
> eingeschränkt ist? Schleifen sind ja beispielsweise auch nicht möglich.

<offtopic>
... aber die ursprüngliche Frage ist ja schon beantwortet worden ;-)

Ich finde es immer wieder interessant, wie einfach, elegant und mächtig
die Makrogeschichte in Lisp gelöst ist: Dort gibt es im Gegensatz zu C
keine spezielle Präprozessorsprache. Als Präprozessorsprache wird
einfach Lisp selber genommen. Dies erlaubt es dem Programmierer, nahezu
beliebige Spracherweiterungen, komplexe Codegeneratoren u.v.m. zu
entwickeln, ohne dass er dazu eine spezielle Makrosprache erlernen muss.
</offtopic>

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren