edv:prg:c:tipp:makros-kollisionen
Makros-Kollisionen
Häufig hat man die Situation, dass auf einer Seite sich einige Makros gegenseitig ausschließen, aber auf der anderen Seite eins davon obligatorisch ist.
Zum Beispiel, das Programm verwendet eine Datenbank - entweder die DB2 oder Informix oder MySQL oder Oracle oder geht über ODBC. Über die Makros (beispielsweise DB_DB2, DB_INFORMIX, DB_MYSQL, DB_ORACLE, DB_ODBC) steuert man, welche Code-Abschnitte je nach verwendete DB kompiliert werden sollen.
Das heißt:
- Mindestens eins von diesen Makros muss definiert sein
- Nur eins von diesen Makros gleichzeitig darf definiert sein und nicht mehr
Hier ist ein Beispiel, wie man zur Kompilierungszeit prüft, ob die o.g. Bedingungen erfüllt sind (Big- und Little-Endian schließen sich gegenseitig aus):
#undef BYTE_ORDER // 1 = big-endian, -1 = little-endian, 0 = unknown #if defined ARCH_IS_BIG_ENDIAN #define BYTE_ORDER (ARCH_IS_BIG_ENDIAN ? 1 : -1) #elif defined ARCH_IS_LITTLE_ENDIAN #define BYTE_ORDER -1 #else #define BYTE_ORDER 0 #endif // ARCH_IS_BIG_ENDIAN und ARCH_IS_LITTLE_ENDIAN dürfen nicht beide gleichzeitig definiert sein. #if defined ARCH_IS_BIG_ENDIAN && defined ARCH_IS_LITTLE_ENDIAN #error Nur eine der beiden Definitionen (ARCH_IS_BIG_ENDIAN, ARCH_IS_LITTLE_ENDIAN) erlaubt #endif // Eine davon muss jedoch definiert sein. #if !defined ARCH_IS_BIG_ENDIAN && !defined ARCH_IS_LITTLE_ENDIAN #error Mindestens eine der beiden Definitionen (ARCH_IS_BIG_ENDIAN, ARCH_IS_LITTLE_ENDIAN) muss definiert sein #endif
Stand: 27.01.2016
EOF
edv/prg/c/tipp/makros-kollisionen.txt · Zuletzt geändert: 2020/01/11 01:23 von 127.0.0.1