Wednesday, September 26, 2012

C++ DEBUG Rule : use assertions

When you are developping, use the assert macro to detect errors as soon as they occur. This macro is defined in the include file <assert.h>, and is used that way :

assert (expression) ;

If expression is false, program will stop indicating which assertion failed.

What is really nice with this macro, is that you can easily get rid of it for the production version of your code, by declaring #define NDEBUG.

This is because the assert macro is defined as :


#ifndef NDEBUG
#define assert(THETEST) ...
#else
#define assert(THETEST) ((void)0)
#endif

C++ INCLUDE Rule : Use forward declaration when possible

Suppose you want to define a new class B that uses objects of class A.
  1. B only uses references or pointers to A. Use forward declaration then : you don't need to include <A.h>. This will in turn speed a little bit the compilation.
      class A ;
      
      class B {
        private:
          A* fPtrA ;
        public:
          void mymethod(const& A) const ;
      } ;
      
  2. B derives from A or B explicitely (or implicitely) uses objects of class A. You then need to include <A.h>
      #include <A.h>
      
      class B : public A {
      
      } ;
      
      class C {
        private:
          A fA ;
        public:
          void mymethod(A par) ;   
      }