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

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.