[表示 : 全て 最新50 1-99 101- 201- 2chのread.cgiへ]
Update time : 05/09 12:46 / Filesize : 40 KB / Number-of Response : 215
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C言語@便利なマクロ



1 名前: [2006/04/12(水) 15:51:10 ]
C言語、C++の便利なマクロを紹介すれ。

とりあえず、頭は簡単な

#define PI 3.141592f
#define DEG_2_RAD(n) (n * PI / 180.0f)

から。

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

200 名前:デフォルトの名無しさん [2007/09/30(日) 04:29:49 ]
#define Rem /##/

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

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

203 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 04:54:44 ]
2番目の意味が分からんのですが、誰か教えてくだされ

204 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 12:02:38 ]
>>203
offsetofでぐぐれ。

205 名前:デフォルトの名無しさん mailto:sage [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 22:14:29 ]
>>167-168
これいいなあ

207 名前:デフォルトの名無しさん mailto:sage [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 07:01:18 ]
C++じゃねぇかww

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

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

211 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 22:14:01 ]
finallyが欲しいな。

212 名前:デフォルトの名無しさん mailto:sage [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 12:56:52 ]
…あれ?
C言語って例外あったの?

214 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 12:58:59 ]
いいえ、それはCではありません。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<40KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef