Macros ...
-
moin meisters ...
habe folgende Definierungen, welche in jeder Header Datei wiederholt werden
#ifdef _WIN32_WCE #define END ; #endif #ifdef _PALMOS #ifdef SECTION #undef SECTION #endif #ifndef SECTION #define SECTION __attribute__ ((section ("seg1"))) #endif #ifdef SECTION #undef END #define END SECTION; #endif #endif
Ziel ist es nur für Win_CE statt
func(); -> func() END zu schreiben
und auch für PalmOS statt
func() __attribute__ ((section ("seg1"))) -> func() END schreiben zu könnenso wie es ist funktioniert es auch, nur wäre es mir lieber in jeder Datei folgende Zeile schreiben zu können
SET_SECTION("seg1")
mir fehlt also
#define SET_SECTION (x) ?????? hier wie weiter ???????????
oder auch wenn es sein muß
#define SET_SECTION (osWin, osPalm, x)Besten Dank im Voraus
mfg
RB
-
mir fällt zB folgendes ein:
#include <stdio.h> #define STR "Dies ist eine Message" #define PRINT_MSG(msg) STR ": " msg int main() { puts(PRINT_MSG("hallo")); #undef STR #define STR "Dies ist eine andere Message" puts(PRINT_MSG("welt")); return 0; }
-
moin meister ...
jo, einfallen tut mir auch was wenn der Tag lang ist
nur dachte und probierte ich, schon sowas in der Art.
#define MACRO (x) \ #ifdef _PALMOS \ #define SECTION (x)\ #endif \
aber in der 2.Zeile kam schon der Fehler, kann jetzt leider nicht probieren
und Meldung habe ich nicht mehr im, jedenfalls war was mit dem Parameter.
Problem war/ist also die Definition über mehrere Zeilen mit Parameter.Nun ja wen nicht ist, mach ichs halt anders, aber wäre wohl die eleganteste Lösung (s.o.) ...
Danke schon mal
mfg
RB
-
Der Präprozessor kann #defines in #defines nicht auflösen...
#define foo #define bla "x"
ist somit ein syntax fehler.
nimm meine Variante.
statt
SET_SECTION("foo")musst du halt
#define SECTION "foo"
...
#undef SECTIONschreiben.
das ist IMHO nicht so schlimm (solche präprozessor sachen müssen 'dirty' sein - sonst fühlt es sich nicht wie C an :p)
-
moin meister ...
ja danke Dir, Du hast Recht, was ich bis heuer nicht wußte, habe ich denn doch
noch irgendwo inner Doku gefunden, das "#" und "##" werden ja in Zusammenhang mit Parametern in der Definition verwendet, wonach #ifdef innerhalb einer Definition nicht funktionieren kann ...mfg
RB