とくにあぶなくないRiSKのブログ

危ないRiSKのブログだったかもしれない。本当はRiSKだけどググラビリティとか取得できるIDの都合でsscriskも使ったり。

芸人とはHackerのことである

Cozy Ozy - コード芸人のススメ
さすがOzyさんだよな。最近分かったのは「実現力のある人」=hacker ってこと。
部分引用で文脈を無視してるかもしれないけど,hackerは「役に立つとか立たないとかというような」事はどうでもいいと考えてる。


「『それ』ができるかできないか。」


これにかかってくる。
『それ』がそのときによって変わる以上,「合理性を求めた勉強はあまり」どころか全く不可能なわけで。当然,「意味の無いものです」。


>真のプロフェッショナルとは、「恥ずかしさ」の全く感じさせないパフォーマーのことです。
当然ですね。恥ずかしがって成し遂げるなどできるはずありません。
他の人と違うこと→恥ずかしい
失敗しちゃう→恥ずかしい
「恥ずかしい」なんて,「できる/できない」以前の問題です。そう,これは「やる/やらない」の問題です。「やる」に進まない輩が「できる/できない」を口にするなっつーの。


>恥ずかしい思いをしろ
>自分の書いたコードを晒せばいいんですよ。とっても酷いコードを。そして笑われて、叩かれればいい。
さて,最近書いている変態コードを晒しましょうか。脳内コンパイルしかしてないので,現存するコンパイラでコンパイルできるかどうかはしらんのですが。つうかコンパイルできない要素がたくさん見つかっちゃった。

C言語でtry-catch-finaly

というわけで,某CotNet Framework で使われるかもしれない TryCatch.h をごらんあれ。
MFCは軽く凌駕してるはずです。FINALLYなんて C/C++ らしからぬものまであるし。

/*! \file TryCatch.h
 *  \brief TRY-CATCH-FINALLY macros.
 *  \author RiSK
 *  \since 20070509
 */

#include <TryCatch/ExceptionStack.h>
#include <TryCatch/JBStack.h>

/*! 例外を投げます。Exceptionクラスの派生クラスを渡します。 */
#define THROW(NEW_EXCEPTION)				\
do							\
{							\
     ExceptionStack_Push((Exception)NEW_EXCEPTION);	\
     longjmp(JBStack_Peek(), 1);			\
}							\
while(0)

/*! エラーが発生する可能性のあるコードを書きます。
 *  TRYブロックの後ろにはCATCHブロック
 *  またはFANALLYブロックが続きます。
 */
#define TRY					\
{						\
     jmp_buf*jb = malloc(sizeof(jmp_buf));	\
     if (!setjmp(*jb))				\
     {						\
	  JBStack_Push(jb);			\
	  {

/*! 例外を捕まえます。
 *  CATCHブロック,FINALLYブロックまたはEND_CATCHが続きます。
 *  \param[in] EXCEPTION_CLASS 捕まえたいExceptionの派生クラス
 *  \param[in] EXCEPTION_IDENTIFIER 利用するEXCEPTION_CLASSの識別子
 */
#defne CATCH(EXCEPTION_CLASS, EXCEPTION_IDENTIFIER)			\
	  }								\
	  goto finally;							\
     } while (0);							\
     do	{								\
	  EXCEPTION_CLASS EXCEPTION_IDENTIFIER = new_#EXCEPTION_CLASS(); \
	  if (!IsFamily(ExceptionStack_Peek(), EXCEPTION_IDENTIFIER))	\
	  {								\
	       break;							\
	  }								\
	  {

/*! TRYブロックまたはCATCHブロックの後に実行されます。 */
#define FINALLY					\
	  }					\
     } while (0);				\
     {						\
	  THROW(ExceptionStack_Pop());		\
     }						\
finally:					\
     free(JBStack_Pop());			\
}

/*! FINALLYが必要ないときにCATCHブロックのあとに実行されます。 */
#define END_CATCH FINALLY

普通にTRY{}CATCH{}FINALLY{}ってできるはずだし,CATCHを抜いてTRY{}FINALLY{}ともできるはずだし,TRY{}CATCH{}END_CATCH; hoge;ともできるはず。私の脳内では。while(0); がかなりトリッキーだとおもふ。
これぐらいやればコード芸人を自負していいでしょか>id:Ozyさん