Problem mit bedingter Kompilierung
-
Hallo,
ich hab seltsamerweise ein Problem mit bedingter Kompilierung und zwar bei folgendem Abschnitt:
//-------------------------------------- // CHOOSE CURRENT NODE: //-------------------------------------- //#define CURRENT_NODE NODE1 #define CURRENT_NODE NODE2 //-------------------------------------- // CHANGE AND/OR ADD BUFFER DEFINITIONS: //-------------------------------------- #define NODE1_TX_BUF_1_AB - #define NODE1_TX_BUF_1_A 1 #define NODE1_TX_BUF_1_B 2 #define NODE1_TX_ID_1 1 #define NODE1_RX_BUF_1_A - #define NODE1_RX_BUF_1_B - #define NODE1_RX_ID_1 - #define NODE2_TX_BUF_1_AB - #define NODE2_TX_BUF_1_A - #define NODE2_TX_BUF_1_B - #define NODE2_TX_ID_1 - #define NODE2_RX_BUF_1_A 1 #define NODE2_RX_BUF_1_B 2 #define NODE2_RX_ID_1 1 //-------------------------------------- // ASSIGNMENT BASED ON CURRENT NODE: //-------------------------------------- #if CURRENT_NODE==NODE1 #define TX_BUF_1_AB NODE1_TX_BUF_1_AB #define TX_BUF_1_A NODE1_TX_BUF_1_A #define TX_BUF_1_B NODE1_TX_BUF_1_B #define TX_ID_1 NODE1_TX_ID_1 #define RX_BUF_1_A NODE1_RX_BUF_1_A #define RX_BUF_1_B NODE1_RX_BUF_1_B #define RX_ID_1 NODE1_RX_ID_1 #elif CURRENT_NODE==NODE2 #define TX_BUF_1_AB NODE2_TX_BUF_1_AB #define TX_BUF_1_A NODE2_TX_BUF_1_A #define TX_BUF_1_B NODE2_TX_BUF_1_B #define TX_ID_1 NODE2_TX_ID_1 #define RX_BUF_1_A NODE2_RX_BUF_1_A #define RX_BUF_1_B NODE2_RX_BUF_1_B #define RX_ID_1 NODE2_RX_ID_1 #endif // CURRENT_NODE==...
Bei der Wahl von NODE2 wird irgendwie trotzdem der erste Zweig ausgeführt.
Ich steh grad aufm Schlauch. Woran liegt das? Danke
-
#elseif
vllt?
-
Möp!
Was sind denn Node1 und Node2? Du hast da ja gar keine Werte zugewiesen.
Mit Werten klappts auch mit dem Vergleich.
-
Achso, anders geht das nicht?
Hmm, ich denk dann mach ichs mit
#define NODE1
//#define NODE2#ifdef NODE1
...
#else
#ifdef NODE2...
#endif // <- müssen hier zwei "#endif"s hin?
Müsste doch auch funktionieren oder?
-
Ja, so wäre der allgemeine Weg, sowas zu machen. Wenn Du nach dem else ein neues if öffnest brauchts natürlich auch zwei endifs. Aber Du kannst weiterhin elif benutzen!
// Eine Variante #define NODE1 //#define NODE2 #if defined(NODE1) // dasselbe wie "ifdef NODE1", aber da es kein elifdef gibt, habe ichs genauso aufgebaut wie den elif #elif defined(NODE2) #endif // Noch eine Variante #define NODE 1 #if NODE == 1 #elif NODE == 2 #endif
-
Nur am Rande: Haben die obigen Makros (
define XYZ -
) irgendeinen tieferen Sinn?
-
Das ganze ist halt allgemeingültig gehalten und die haben insofern einen Sinn, dass sie halt ne Fehlermeldung erzeugen wenn ich ein unbenutztes in die entsprechenden Funktionen einsetze, hätte sie natürlich auch leer lassen können, aber is halt Geschmackssache
-
Also ich kann mir da bessere Möglichkeiten vorstellen, einen Fehler zu erzeugen. Vor allem dürfte der entstehende Fehler nicht besonders lesbar sein (und mit etwas Glück ist an der Stelle das '-' sogar syntaktisch erlaubt). Am kürzesten ist es wohl, du lässt die unbenutzten Namen einfach weg - dann bekommst du eine klare Meldung "undefined identifiere", wenn du sie trotzdem benutzt.
PS: Und der Sinn hinter der Lösung ist mir auch nicht klar - wie ähnlich sind sich denn die Node1- und Node2-Variante deines Programms, wenn sie noch nichtmal die selben Variablen verwenden? (bei CURRENT_NODE==NODE1 sind alle RX_* Variablen ungültig, bei NODE2 alle TX_*)