C言語@便利なマクロat TECH
C言語@便利なマクロ - 暇つぶし2ch175:デフォルトの名無しさん
07/03/07 15:57:17
>>172
そうか。では while/switch/if 各キーワードとその後の左括弧、と訂正しよう。
ところで、
>while(...) { ... } の全体で一つの文なんだが
それは間違い。

176:デフォルトの名無しさん
07/03/07 16:08:25
そんなことはない

177:デフォルトの名無しさん
07/03/07 20:29:04
>>175
ジョークだよね?

178:デフォルトの名無しさん
07/03/15 00:22:43
誰か「式」と「文」の意味を教えてやれ

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

180:デフォルトの名無しさん
07/03/29 02:09:51
#define MY_STATUS (*v*)

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

182:デフォルトの名無しさん
07/07/14 23:14:56
64bitでしねる

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

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

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

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

187:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/09/27 14:36:41
#define HELLOWORLD (puts("Hello World"));

189:デフォルトの名無しさん
07/09/27 16:53:35
#define fib(n) (n>2)?fib(n-1)+fib(n-2):1

190:sage
07/09/27 23:37:02
#define l i
#define retrun return
#define mail main

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

191:デフォルトの名無しさん
07/09/28 00:24:23
mianならよくあるな。

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

192:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/09/28 13:58:09
#define return main();

194:デフォルトの名無しさん
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