ご意見箱 (作成物の箱用)
作成したVBAに対するご意見やバグ報告などお書きください。yFlowGen v4.2不具合 - taro
2023/07/24 (Mon) 16:36:09
いつもお世話になっております。taroと申します。
yFlowGen、いつも愛用させていただいています。
連投を失礼いたします。
追加で1点、ご報告させていただきます。
■使用VER
yFlowGen_jp-4.2
■不具合の現象:
下記のC言語のプログラムでフローチャートを作成すると、フローチャートが正しく接続されないことがあります。
■再現手順:
下記のプログラムからフローチャートを生成します。
int TEST2( void )
{
int ret = NG;
if( ret = FUNC_A() )
{
}
else if( ret = FUNC_B() )
{
}
#ifndef COMPILE_A
else if( ret = FUNC_C() )
{
}
#endif
else
{
ret = OK;
}
return ret;
}
フローチャートを作成すると、#ifndefの後の処理ブロックが接続されていないようです。
#ifdefでも同様の現象が確認できます。
一度、ご確認いただけますでしょうか?
Re: yFlowGen v4.2不具合 - toowaki
2023/07/25 (Tue) 00:24:57
taro様
お教えいただき大変ありがとうございます。
週末に修正を試みてみます。
Re: yFlowGen v4.2不具合 - taro
2023/07/31 (Mon) 10:26:21
toowaki様
現象はご確認できましたでしょうか?
特別に急でいるというわけでもないのですが…
Re: Re: yFlowGen v4.2不具合 - toowki
2023/07/31 (Mon) 11:25:39
taro様
ご指摘いただいた動作については見通しがつき、あと少しで完成です。
残りは#ifdef-#elseプリプロセッサ処理はユーザによってコード内のどの部分にも記載可能であることから、表示方法をどうしようか考え中です。
また別の方からご指摘いただいた#if-#elseについては論理演算子が使用される場合の判定が難しく、対応についてはまずは非対応とし、#if 0/1以外での#if-#elseは常にelse側を選択するようにしようと考えています。
Re: yFlowGen v4.2不具合 - taro
2023/08/01 (Tue) 14:23:01
toowki様
ご対応いただきありがとうございます。
お待ちしております!
また、下記は、個人的な意見ですので、参考として受け取って頂ければと思います。
#ifdef の処理ブロックをフローチャート上のどこへ表示するのか迷われているようにお見受けしますが、この問題は、プリプロセッサレベルの処理と、プログラムレベルの処理を、同じレベルの処理としてフローチャートに表示しようとして不整合が起きているように思います。
個人的には、プログラムフローレベルのフローチャートが正しく出力できることの方が重要です。 (#if-#elseを含む)
そこで代案なのですが、プリプロセッサ処理はフローチャートの処理ブロックとして表示しないようにするというのは如何でしょうか。
#ifdef の説明が必要になるときは、有効な #define が何かだけコメントで書いておき、#define の有効/無効 で、2つフローを比較して説明すればよい気もします。
(例)
コメント:[有効な#define なし ] → フローチャートA を生成/参照
コメント:[有効な#define BBB] → フローチャートB を生成/参照
実際のコンパイラと同様に、簡易的なプリコンパイル後のデータを解析器に食わせるような処理になってしまうと思いますが…。
他の諸先輩方のご意見もあると思いますので、あくまで1つの意見として捉えて頂ければと思います。
ご検討のほど、よろしくお願い致します。
Re: Re: yFlowGen v4.2不具合 - toowki
2023/08/02 (Wed) 08:29:17
taro様
#define-#elseについてはフローチャートのみであれば修正できているため、公開してもよかもと考えていますが、もう少し確認と検討を行った後に公開させていただきます。
#if-#elif-#elseについては、演算子があると組合せが無限大なんです。
その機能だけで計算機アプリが作れてしまうような機能を実装する必要があり、現在何か良い方法がないかを検討中です。
Re: yFlowGen v4.2不具合 - taro
2023/08/02 (Wed) 11:29:30
toowki様
ご回答いただきありがとうございます。
失礼しました、#ifdef の表示方法に問題があるのかと思っていましたが解決済みのようですね。
少し脱線してしまいましたが、私は上記のフローチャートが正しく出力できれば十分嬉しいため、こちらの修正をお待ちしております。
ご対応のほどよろしくお願い致します。
p.s.
#if~#elseについては、なるほど、#if の後ろのに式がいると解析器だけでなく実行器も必要ということですね…。
代替案を思いつくとすれば、#if~#elif~#else については、下記のように式をそのまま文字列として扱う、などですかね。
(例)
-------------------------------------
#if TEST1
printf ("A");
#else
printf ("B");
#endif
#if TEST2 > 0
printf ("A");
#else
printf ("B");
#endif
-------------------------------------
>> フローチャート出力のエクセルマクロ
[#define定義文]
"TEST1" = true
"TEST2 > 0" = true
-------------------------------------
この機能があれば、プログラムに修正を加えなくて済むため、少し助かったりしますが…あくまで1つの案レベルです。
ご検討のほどよろしくお願いします。
Re: Re: yFlowGen v4.2不具合 - toowki
2023/08/07 (Mon) 20:42:29
taro様
このところ毎日忙しく、なかなかリリースできておらずすみません。
ひとまず水曜夜に現状のものをリリースし、お盆に再度更新します。
演算子を含んだdefineについてアドバイスいただきありがとうございます。
お教えいただいたものであれば演算子なしのものお同じ仕組みで適用できます。
演算子を含んだdefineについてお盆に考えてみます。
Re: yFlowGen v4.2不具合 - toowaki
2023/08/09 (Wed) 23:55:55
taro様
本バージョンにて2023/07/24にご指摘いただいた内容に対応しました。
下記にアップロードしましたのでご確認お願いします。
https://github.com/toowaki/yFlowGen_jp/releases/tag/4.3
なお、演算子を含んだ#if-#elifの対応については今後のバージョンでの対応を検討しています。
Re: yFlowGen v4.2不具合 - toowaki
2023/08/12 (Sat) 12:31:53
taro様
if-#elif の条件判定にて演算子を用いる場合について対応しました。
ご確認よろしくお願いします。
【Release · toowaki/yFlowGen_jp】
https://github.com/toowaki/yFlowGen_jp/releases
Re: yFlowGen v4.2不具合 - taro
2023/09/12 (Tue) 21:49:56
toowki様
ご対応いただき誠にありがとうございます。
すっかり返信が遅くなってしまい大変申し訳ありません。
まず、修正依頼をお願いした件についてです。
発生していた不具合が修正されていることを確認しました。
最高です (∩´∀`)∩
次に、#if-#elifの条件判定についてです。
すみません、ReadMeを見てみたのですが、記述方法が分かりませんでした。
演算子を含む#if-#elif-#endif の場合、どのようにエクセルマクロにdefineを定義すればよいでしょうか。
例えば添付図の場合、どのように書けばよいでしょうか。
お手数ですが、ご教授ください。
Re: yFlowGen v4.2不具合 - toowaki
2023/09/13 (Wed) 07:33:27
taro様
-defineオプションに値が代入できるようになり、設定したdefineの値によりフローチャートが切り替わります。
お教えいただいた図の場合、
- - - - - - - - - - - - - - - - - - - - - -
yFlowGen.exe -f sample.c -define HOGE=0
--> HOGE==0の行の内容(TEST=1)がフローチャートとして表示
yFlowGen.exe -f sample.c -define HOGE=1
--> HOGE==1の行の内容(test=2)がフローチャートとして表示
yFlowGen.exe -f sample.c -define HOGE=100
--> それ以外の行の内容(test=3)がフローチャートとして表示
- - - - - - - - - - - - - - - - - - - - - -
となります。
複数指定する場合は、
yFlowGen.exe -f sample.c -define HOGE=3,HOGE2=100,HOGE3=300
のようにカンマで接続して記載してください。
HOGEがdefineされていない場合はHOGE=false(=0)として扱います。
Re: yFlowGen v4.2不具合 - taro
2023/09/13 (Wed) 14:08:05
toowki様
ありがとうございます!
論理演算子に対応しています!すごいです!
私が#ifで良く使うレベルで簡単に試してみたところ動作しました。
ただ、#elifのみ、判定がされていないケースがありました。
私の書き方に問題があるかもしれませんが、
一度内容を確認いただけますでしょうか。
[define設定]
HOGE=2,PIYO=1
[プログラム]
#if HOGE != 0
fncA();
#endif
#if HOGE == 2
fncB();
#endif
#if HOGE > 1
fncC();
#endif
#if HOGE >= 2
fncD();
#endif
#if HOGE < 3
fncE();
#endif
#if HOGE <= 2
fncF();
#endif
#if ( HOGE == 2 ) && ( HOGE == 2 )
fncG();
#endif
#if ( HOGE == 2 ) && ( HOGE != 2 )
fncG_NG();
#endif
#if ( HOGE == 2 ) || ( HOGE != 2 )
fncH();
#endif
#if ( HOGE != 2 ) || ( HOGE != 2 )
fncH_NG();
#endif
#if HOGE == ( 1 + 1 )
fncI();
#endif
#if HOGE == ( 5 - 3 )
fncJ();
#endif
#if HOGE == ( 2 * 1 )
fncK();
#endif
#if HOGE == ( 6 / 3 )
fncL();
#endif
#if PIYO == 1
fncM();
#elif PIYO == 2
fncM_NG1();
#else
fncM_NG2();
#endif
#if PIYO == 0
fncN_NG1();
#elif PIYO == 1
fncN();
#else
fncN_NG2();
#endif
#if PIYO == 0
fncO_NG1();
#elif PIYO == 2
fncO_NG2();
#else
fncO();
#endif
[期待値]
fncA~fncO が順番に表示される
Re: Re: yFlowGen v4.2不具合 - toowki
2023/09/15 (Fri) 06:59:16
taro様
ご確認、ご連絡いただきありがとうございます。
土日に確認させていただきます。
Re: yFlowGen v4.2不具合 - toowaki
2023/09/16 (Sat) 07:40:49
taro様
いただいたサンプルの場合、正しく動作しているように見えました。
elifも正しく動作しているようでした。
例えば、下記の場合、fncN()が正しく選択されています。
- - - - - - - - - - - - -
[define設定]
HOGE=2,PIYO=1
[プログラム]
#if PIYO == 0
fncN_NG1();
#elif PIYO == 1
fncN();
#else
fncN_NG2();
#endif
- - - - - - - - - - - - -
なお、どのdefine判定が選択されたかをオレンジ色のコメントブロックで表示し、少し見やすくしているため、お試しください。(添付画像sample_flow.png 参照)
Re: yFlowGen v4.2不具合 - toowaki
2023/09/17 (Sun) 13:13:02
taro様
taro様の画像をあらためてみるとfncN_NG2になっていますね。
もしかするとコメント表示のON/OFFによって動作に差がでいるのかもしれません。もう少し確認してみます。
Re: yFlowGen v4.2不具合 - toowaki
2023/09/19 (Tue) 00:43:46
taro様
私の環境では2023/09/13 (Wed) 14:08:05にtaro様からいただいた記述にて、
コメントをOFF(-no_comment)してもfncNが表示されました。
もしかすると、お試しいただいたバージョンが古いのかもしれません。
VectorのV4.4もしくは、GithubのV4.4をお試しいただいてもよろしいでしょうか。
なお、コマンドプロンプトでは下記のように入力しました。
yFlowGen.exe -f <任意のファイル名>.c -no_comment -define HOGE=2,PIYO=1
Re: yFlowGen v4.2不具合 - taro
2023/10/11 (Wed) 13:13:10
toowki様
連絡遅くなり申し訳ありません。
この現象は起きたり起きなかったりするようです。
現状、再現ができなくなりましたので一旦CLOSEとさせていただきたいと思います。
もし再発するようであれば、こちらの掲示板に御連絡させて頂こうと思います。
ご対応いただきありがとうございました。
Re: Re: yFlowGen v4.2不具合 - toowaki
2023/10/12 (Thu) 04:24:49
taro様
一旦クローズとのこと、承知しました。
再現したりしなかったりするということから、文字コード、OS、言語設定等原因がどこあるかを絞る必要がありそうですね。