Benutzer-Werkzeuge

Webseiten-Werkzeuge


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

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki