⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 preprocessor.cpp

📁 内存受限系统软件开发一书的代码。(虽不及Gang of Four的模式掷地有声
💻 CPP
字号:
#include <iostream.h>

#define ASSERT( i ) {if (!(i)) cout << "Assert fail: " #i "line " << \
 __LINE__ << endl;} 

class A { public:
  A( int i ) : x( i ) { cout << i << " created\n"; }
  ~A() { cout << x << " deleted\n"; }
private: 
  int x;
public:
  A* next;
};


A* ListHead;
template <class T> T* dummy_function_to_save_listPtr( T*& list, T* next ) { 
  T* x = list; list = next; return x; } 
#define ADD_LIST( LIST, ITEM, NEXT ) \
{(ITEM)->NEXT = (LIST); (LIST) = (ITEM);}
#define GET_LIST( LIST, NEXT ) \
dummy_function_to_save_listPtr( (LIST), (LIST)->NEXT )


class B { public: B* next; };

int main()
{
  B* ListOfB = 0;
  B* b = new B;
  ADD_LIST( ListOfB, b, next );
  delete GET_LIST( ListOfB, next );

  ASSERT( ListHead == 0 );
  A* x = new A( 0 );
  ADD_LIST( ListHead, x, next );
  ASSERT( ListHead == x );
  ASSERT( GET_LIST( ListHead, next ) == x );
  ASSERT( ListHead == 0 );
  delete x;
  for (int i=0; i<3; i++)
    {
      x = new A( i );
      ADD_LIST( ListHead, x, next );
    }
  for (; ListHead ;)
    delete GET_LIST( ListHead, next );
  ASSERT( ListHead == 0 );
}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -