allgemein
objekt-orientierter entwurf
programmierung
qualitätssicherung / testen

Programiersprache  C++ 
Schwierigkeitsgrad  mittel 
Eingereicht von  Reto Carrara (aka genericus
Veröffentlicht am  10.02.2005  
Lösung veröffentlicht am   18.02.2005 

Der bugTeaser

/** 
 * Use this macro to do assertions in unit tests
 */
#define B_ASSERT(EXPECTED,ACTUAL)\
 incrementAssertionCount();\
 if ( BSysTestUtility_assert(EXPECTED,\
      ACTUAL) == false )\
   {BSysTestUtility_error(EXPECTED,ACTUAL,\
     __FILE__,__LINE__,getTestInfo());}

Anmerkungen

Dieses Makro ist Teil eines Unit-Test Frameworks für C++. Der Fehler ist offensichtlich und blieb dennoch lange unerkannt. Die Frage ist, warum?

Für Nicht-C++-Programmierer: #define ist streng genommen nicht Bestandteil der Programmiersprache C++. Wenn wir z.B. das Folgende schreiben:

#define MWST 7.6

Dann wird der Präprozessor den symbolischen Namen MWST aus dem Quellcode entfernen und durch 7.6 ersetzen; der Compiler bekommt MWST also nie zu sehen.

Über diesen bugTeaser diskutieren.



#003: Der tückische Zuhörer #001: Der unschuldige Iterator

Druckbare Version