/* メモ: ここではC++の例外処理機構すなわちtry,catch,throwを ある程度、模倣するマクロを定義している。使い方は以下の通り int theVar; //catchでthrow値を受け止める変数 ptry{ //tryブロックの開始 ... pthrow(値); //throwの実行 ... } pcatch(theVar){ //catchブロックの開始 } pcatchで受け止める変数theVarは、あらかじめint型変数として定義すること pthrowが実行されなかった場合、theVarには0が無条件に入っている。 pthrowで投げる値は0以外であること。0である場合、pcatchブロック内は 実行されない。わざと0を投げるテクニックも使えるかもしれないが、 C++本来のthrowの仕様通りにはいかなくなる。 */ extern int gPTHROW_VALUE__; /* pthrowレベル */ #define ptry \ gPTHROW_VALUE__ = 0; #define pthrow(VAL) \ do { \ gPTHROW_VALUE__ = VAL; \ goto PCATCH_ENTRY__; \ } while(0) #define pcatch(VAR) \ PCATCH_ENTRY__:; \ VAR = gPTHROW_VALUE__; \ gPTHROW_VALUE__ = 0; \ if(VAR)