FrontPageMSLMSL/PP

msl_pp_arithmetic

プリプロセッサを活用して算術演算を行います。


MSL_PP_INC

宣言:

#define MSL_PP_INC(x)

xに指定された数値に+1(インクリメント)した値にマクロ展開を行います。

例:

int hoge ##MSL_PP_INC(5);
hoge6 = 7;

xに指定可能な値は0~256の間です。


MSL_PP_DEC

宣言:

#define MSL_PP_DEC(x)

xに指定された数値に-1(デクリメント)した値にマクロ展開を行います。

例:

int hoge ##MSL_PP_DEC(5);
hoge4 = 3;

xに指定可能な値は0~256の間です。


MSL_PP_ADD

宣言:

#define MSL_PP_ADD(x,y)

エイリアス: * MSL_PP_PLUS

xにyを加算した値にマクロ展開を行います。

例:

int hoge ##MSL_PP_ADD(3,4);
hoge7 = 8;

xとyの合計が256を超える場合、このマクロ展開はエラーになります。

また、内部的にこの処理は、yに対しx回インクリメントを行う事により実現されているため、
x<yの場合である方がより効率的です。(なお、この効率はコンパイル時の話であるため、
実際の実行コードとしての影響はありません。)


MSL_PP_SUB

宣言:

#define MSL_PP_SUB(x,y)

エイリアス: * MSL_PP_MINUS

xからyを減算した値にマクロ展開を行います。

例:

int hoge ##MSL_PP_ADD(8,5);
hoge3 = 1;

x、yの値が256を超える場合、ないしx-yの結果が-1を下回る場合、このマクロ展開はエラーになります。


MSL_PP_MUL

宣言:

#define MSL_PP_MUL(x,y)

xにyを乗算した値にマクロ展開を行います。

例:

int hoge ##MSL_PP_MUL(10,20);
hoge200 = 400;

xとyの乗算結果が256を超える場合、このマクロ展開はエラーになります。

また、内部的にこの処理は、y+y+...+yをx回繰り返す事により実現されているため、
x<yの場合である方がより効率的です。(なお、この効率はコンパイル時の話であるため、
実際の実行コードとしての影響はありません。)

TODO: 分かり辛いのでx+x+...+xのy回の処理にした方がよさそう。