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

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

Preprocessor

IS_EMPTYマクロを自作してみた

自作と書いていますが、BOOST_PP_IS_EMPTYのソースを読んでほとんどマネています。また gcc 4.8.2 でのみテストしています。 #define EMPTY() #define DEF_COMMA0 _,1 EMPTY #define COMMA0() ,0 #define TUPLE2_ELEM1_I(f,s) s #define TUPLE2_ELEM1(t) TUP…

__VA_ARGS__ がよく分からない

C99, C++0xで使える__VA_ARGS__がよく分かりません。 次のようなコードをプリプロセッサにかけてみることを考えます。 #define A(...) __VA_ARGS__ #define B(a, ...) a, __VA_ARGS__ A() // Nothing A(a) // a A(a, b)// a, b B() // Warning. B(a) // Warn…

C99, C++ で使える using マクロ書いた

C# なんかである using をマクロ使って実装してみました。とはいっても,C++ は RAII があるので,主なターゲットは C99 です。古いC言語では for 内で変数の宣言ができないので対応していません。 あ,using ブロック内で return するとリソースリーク起き…

二進数表記できるマクロ

えー、C言語で2進数って書けないのー?ショックすぎるやろ・・・2010-09-10 17:38:32 via Twit for Windows じゃあ,プリプロセッサの力を借りてC言語・C++でも二進数を書けるようにしようぜ! // ライブラリ // SSCRISK_BINARY(binary) // 0 〜 11111111111…

みんなでたしざん

みんなでたしざん。みんななかよし。*1 /* 1: C/C++ */ int add(int x, int y) { return x + y; } // 2: C++ template<typename T> T Add(T x, T y) { return x + y; } // 3: C++ template<int x, int y> struct ADD{ enum{ value = x + y }; }; // 4: C++ #include<functional> // 5: C++ #include<boost/lambda/lambda.hpp></boost/lambda/lambda.hpp></functional></int></typename>…

BOOST_PP_IS_EMPTY(x)

アンドキュメントをアンオフィシャルにドキュメント化。 インクルード #include<boost/preprocessor/facilities/is_empty.hpp> BOOST_PP_IS_EMPTY(x) x を展開した結果が空か調べます。 型 any → bool x 戻り値 x を展開した結果が空であれば 1 を返します。 例えば #define x のように x が空になるよう</boost/preprocessor/facilities/is_empty.hpp>…

マクロ定義の有無を調べる

注:引用時に整形を加えました。また,codepad.org へ張ったコードを修正したコードをこのエントリに載せました。 問題 →Twitter / Faith and Brave: プリプロセスでこういうことしたいんだけど、どうにかな ... プリプロセスでこういうことしたいんだけど、…

1から10までの自然数の合計を出すプログラムをプリプロセッサを使って書きなさい

→ベンチャー社長で技術者で: 「転職活動する暇があったらブログを書け」について 弊社の入社試験に、「1から10までの自然数の合計を出すプログラムを書きなさい」というのがあるのですが、ほとんどの人はループで書けていた。足し算だからかな?ちなみに、も…