● 関数リファレンス
代入式の計算
int __stdcall StrCalc_substitution(PSTRCALC_PARAM prm,char *str,int btemp,PPARAM_INFO pinf,int *px,int *py);
引数
引数名 | 意味 |
prm | STRCALC_PARAM 構造体の実体アドレス |
str | 計算対象の代入式を格納したバッファの先頭アドレス |
btemp | 変数が新規登録される場合のテンポラリ属性付加フラグ |
pinf | PARAM_INFO 構造体の実体アドレス(NULL指定可) |
px | 一、二次元配列の場合、指定された横インデックスを格納する領域のアドレス(NULL指定可) |
py | 二次元配列の場合、指定された縦インデックスを格納する領域のアドレス(NULL指定可) |
戻り値
正常終了した時は STATUS_NORMAL を返します。
それ以外は状態コード を返します。
説明
str に格納された代入式を計算します。結果は、左辺に指定された変数に格納されます。また、prm のメンバ ans にも格納されます。
代入式はstr の先頭から順に参照されます。最初に出現したイコール = までを左辺、イコール以降を右辺と見なします。右辺を計算し、正常終了した場合は左辺で指定された変数に結果を格納し、関数を終了します。
a = 1 + 2 + 3
計算式規則では、イコールは一致を調べる比較ですが、代入式では
代入を表す記号として認識されます。
イコールは、括弧の中にあるものや、シングルクォートで括られたものは計算式の一部と見なされます。
左辺に指定した変数が未登録の配列である場合(インデックスを伴う変数表記の場合)は STATUS_SUBST_SYNTAXERROR を返します。
変数が未登録の単一変数の場合、新規に登録してから計算を行います。この時の変数の初期値は 0 です。
a = a + 1 → a = 0 + 1 と同じ
新規登録される場合、btemp が 1 の時はテンポラリ属性が付加されます。0 の場合は付加されません。
左辺の変数情報は pinf に PARAM_INFO 構造体の領域を指定する事で、受け取る事ができます。また、左辺が配列変数だった場合のインデックスを px 、py で受け取る事ができます。pinf 、px 、py は、不要な場合は NULL を指定する事ができます。
pinf->type の値 | px , py にセットされる内容 |
PRM_SINGLE | *px = 0 , *py = 0 |
PRM_DIM1 | parameter (index ) → *px = index , *py = 0 |
PRM_DIM2 | parameter (x , y ) → *px = x , *py = y |