C言語@便利なマクロat TECH
C言語@便利なマクロ - 暇つぶし2ch194:デフォルトの名無しさん
07/09/28 14:02:21
>>192
その実装で異なる名前のついたマクロ10種類くらい見たな。
せめて一番上だけでも標準化しろ。

195:デフォルトの名無しさん
07/09/28 14:18:54
->
を使ったプログラムを作れ

196:デフォルトの名無しさん
07/09/28 19:47:26
/*->*/

197:デフォルトの名無しさん
07/09/29 22:15:38
>>194
有名なところで、XtNumber, nuberof,辺りか?

198:デフォルトの名無しさん
07/09/30 00:19:27
>>194
おれはNARRAYという名前にした


199:デフォルトの名無しさん
07/09/30 02:00:54
>>192 >>194
最もよく使うであろう一番目が標準化されない理由は知らんが、
二番目のは offsetof として標準化されている。

200:デフォルトの名無しさん
07/09/30 04:29:49
#define Rem /##/

201:デフォルトの名無しさん
07/09/30 07:45:18
>>199
俺も最初offsetofかと思ったけど、よく見ると違うぞ。
名前どおり、メンバに対するNELEMSになっている。

202:デフォルトの名無しさん
07/09/30 14:09:39
長さの不明な配列っぽいものに適用して嵌る連中がでるからな。

203:デフォルトの名無しさん
07/10/27 04:54:44
2番目の意味が分からんのですが、誰か教えてくだされ

204:デフォルトの名無しさん
07/10/29 12:02:38
>>203
offsetofでぐぐれ。

205:デフォルトの名無しさん
07/11/17 00:09:34
最近ボツにしたマクロを晒してみる。

#define CREATE_IF(pred, type, name, params) \
std::auto_ptr<type> name; \
if (pred) { \
std::auto_ptr<type> temp##name(new type params); \
name = temp##name; \
}

こんなふうに使う。

CREATE_IF(isMultiThreading, scoped_lock, lock, (this->mutex_));


206:デフォルトの名無しさん
07/11/17 22:14:29
>>167-168
これいいなあ

207:デフォルトの名無しさん
07/11/18 18:28:08
俺が使ってる便利マクロ
D言語のscope(exit)とか便利そうだよね

#define SCOPE_EXIT(var,iroiro) \
typedef BOOST_TYPEOF(var) BOOST_PP_CAT(_scopeexit_var_type,__LINE__); \
struct BOOST_PP_CAT(_scopeexit_kokodake_type,__LINE__) { \
  BOOST_PP_CAT(_scopeexit_kokodake_type,__LINE__) \
   (BOOST_PP_CAT(_scopeexit_var_type,__LINE__) v):var(v){} \
  ~BOOST_PP_CAT(_scopeexit_kokodake_type,__LINE__)(){iroiro} \
  BOOST_PP_CAT(_scopeexit_var_type,__LINE__) var; \
}BOOST_PP_CAT(_scopeexit_kokodake,__LINE__)(var);

使い方:
HANDLE handle = ...;
SCOPE_EXIT(handle,
 ::CloseHandle(handle); // スコープ抜けたら勝手に閉じられる
)

208:デフォルトの名無しさん
07/11/19 07:01:18
C++じゃねぇかww

209:デフォルトの名無しさん
07/11/19 20:04:33
ほんとだ。それだったらboost::shared_ptrから
参照カウントを取り除いたようなものを作れば十分だよ。マクロ要らない。

210:デフォルトの名無しさん
07/11/21 01:02:00
NELEMSはプログラミング作法に同じ名前で載ってたな。
ぐぐったらこのスレがヒットしたw

211:デフォルトの名無しさん
07/12/26 22:14:01
finallyが欲しいな。

212:デフォルトの名無しさん
07/12/28 01:45:51
やってみた。

// ストレートに
#define UNWIND_PROTECT(block, finally_block) \
 { try { block } catch (...) { finally_block throw; } finally_block }

// finallyブロックの複製を避けてみる
class unwind_protect_no_error {};
#define UNWIND_PROTECT(block, finally_block) \
 try {\
  block\
  throw unwind_protect_no_error();\
 } catch (...) {\
  finally_block;\
  try {\
    throw;\
  } catch (const unwind_protect_no_error&) {}\
 }

// ノンケでも構わず喰っちまう使い方なんだぜ
// デストラクタでどうにかする方が良いと思うけど…こういう遊び、好きですから…
UNWIND_PROTECT({
 if (!dynamic_cast<GachiHomo*>(boy)) {
  throw UnexpectedExperienceException();
 }
}, {
 boy->insert(this);
});



213:デフォルトの名無しさん
07/12/28 12:56:52
…あれ?
C言語って例外あったの?

214:デフォルトの名無しさん
07/12/28 12:58:59
いいえ、それはCではありません。


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch