最近帮助同事解决了一个必崩的问题。看似挺小儿科的问题,却暴露了编码过程的不良习惯。

  同事写了一个数据处理类CXXXProcess,放在libXXX工程里。同时提供接口IXXXProcess供他人使用。这没什么问题。问题是,为方便做一些debug下的统计,CXXXProcess里使用#ifdef声明了一个数组,而这个宏放在VS的预处理器。

  class CXXXProcess : public IXXXProcess

  {

  // ...

  // ...

  #ifdef XXX_DEBUG

  float statData_[100]; 

    #endif

  }

  结果是,其它同事在另外的工程使用这个类库,必然崩溃。因为除了类库作者,没人去知道XXX_DEBUG这个宏。

  实际上,良好的设计,应该做到让上层调用者只关心接口,而不关心内部实现。