[表示 : 全て 最新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)

から。

175 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 15:57:17 ]
>>172
そうか。では while/switch/if 各キーワードとその後の左括弧、と訂正しよう。
ところで、
>while(...) { ... } の全体で一つの文なんだが
それは間違い。

176 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 16:08:25 ]
そんなことはない

177 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 20:29:04 ]
>>175
ジョークだよね?

178 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 00:22:43 ]
誰か「式」と「文」の意味を教えてやれ

179 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 12:33:31 ]
技術者なら規格書くらい嫁、としか言えません。
ドカタなら…お悔やみ申し上げます。

180 名前:デフォルトの名無しさん mailto:sage [2007/03/29(木) 02:09:51 ]
#define MY_STATUS (*v*)

181 名前:デフォルトの名無しさん mailto:sage [2007/07/14(土) 22:24:48 ]
//整数の絶対値を求める
#define abs(a) ((a xor (a>>31))-(a>>31))

182 名前:デフォルトの名無しさん mailto:sage [2007/07/14(土) 23:14:56 ]
64bitでしねる

183 名前:デフォルトの名無しさん mailto:sage [2007/07/15(日) 02:59:00 ]
マクロ使わんでもちゃんと最適化されるがな。



184 名前:デフォルトの名無しさん mailto:sage [2007/07/15(日) 20:49:04 ]
//割り算の余剰を求める
#define mod(a,b) (-(b*(a/b))+a)

185 名前:デフォルトの名無しさん mailto:sage [2007/07/15(日) 21:01:19 ]
#define mod(a,b) (-((b)*((a)/(b)))+(a))

186 名前:デフォルトの名無しさん mailto:sage [2007/07/17(火) 10:37:15 ]
>>184>>185
mod演算子の存在意義を否定するろくでもないマクロだな。
実数なら関数があるんだし。
>>181
>183じゃないが、下手すりゃ普通に書いたほうが速いぞ。

187 名前:デフォルトの名無しさん mailto:sage [2007/07/17(火) 17:01:06 ]
C89 の「負数の商・剰余は処理系依存」解消マクロかと思えば
-1/2が0になる処理系 (-1%2 = -1) で mod(-1, 2) → -1
-1/2が-1になる処理系 (-1%2 = 1)  mod(-1, 2) → 1
そのまんまじゃねーかよw

188 名前:デフォルトの名無しさん [2007/09/27(木) 14:36:41 ]
#define HELLOWORLD (puts("Hello World"));

189 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 16:53:35 ]
#define fib(n) (n>2)?fib(n-1)+fib(n-2):1

190 名前:sage [2007/09/27(木) 23:37:02 ]
#define l i
#define retrun return
#define mail main

これでもうtypoも怖くない。
ってか、数日前に部下が素でやってたのを見たとき、
バカはバカなりに頭を使うものだと感動した。

191 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 00:24:23 ]
mianならよくあるな。

C++@便利なテンプレート
ならもっと色々出てきたろうに。普通にクイックソートとか書けるからなぁ。

192 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 00:59:29 ]
#define NELEMS(array) (sizeof(array)/sizeof(*(array)))
#define MEMBER_NELEMS(type, name) (NELEMS(((type*)NULL)->name))
#define END_OF_ARRAY(array) (array + NELEMS(array))

プレーンCの仕事したとき、地味に便利だった。


193 名前:デフォルトの名無しさん [2007/09/28(金) 13:58:09 ]
#define return main();



194 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 14:02:21 ]
>>192
その実装で異なる名前のついたマクロ10種類くらい見たな。
せめて一番上だけでも標準化しろ。

195 名前:デフォルトの名無しさん mailto:age [2007/09/28(金) 14:18:54 ]
->
を使ったプログラムを作れ

196 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 19:47:26 ]
/*->*/

197 名前:デフォルトの名無しさん mailto:sage [2007/09/29(土) 22:15:38 ]
>>194
有名なところで、XtNumber, nuberof,辺りか?

198 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 00:19:27 ]
>>194
おれはNARRAYという名前にした


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