K.Maebashi's BBS

ご自由に書き込んでください。雑談も可。
テスト書き込みの類はテスト用掲示板にどうぞ

[日付順表示] [日付順インデックス] [スレッド順インデックス]

新規投稿 | 開設者ホームページへ戻る | ヘルプ

[407] Re:synchronizedメソッドの“変なこと”
投稿者:(ぱ)
2007/02/20 02:13:25

>こんにちは。はじめまして。 はじめまして。書き込みありがとうございます。 >もしよろしければ、可能性として起こりうる"変なこと"をご教示願えませんでしょうか? >getとsetが分かれていたり、setのXとYが分かれていたりしていたのでは、 というのが一応ヒントというか根拠のつもりです。 簡単な方から。 ◎setのXとYが分かれていたりしていたのでは… 現在(100, 100)であるPointを、(200, 200)に移動させたかったとしましょう。 そのために、 p.setX(200); p.setY(200); と書くと、setX()してからsetY()するまでの間、一時的に(200, 100)という状態になり、 この状態が他スレッドから見えてしまいます。 ◎getとsetが分かれていたり… ふたつのスレッドA, Bが以下のようにxをインクリメントしようとすると、 x = p.getX(); // スレッドA ←(1) x = p.getX(); // スレッドB ←(2) p.setX(x+1); // スレッドA ←(3) p.setX(x+1); // スレッドB ←(4) (3)でスレッドAがインクリメントした結果が(4)で上書きされてしまい、 ふたつのスレッドがひとつずつインクリメントしているはずなのに、 結局xは1しか増えないことになります。 ひとつめの問題は仕様だと言い張ることも可能かもしれませんが、 ふたつめの問題はおそらく致命的でしょう。 結局、マルチスレッドで正しくプログラムを動かしたいのであれば、 Pointのような低レベルなクラスで、個々のメソッドに機械的にsynchronizedを つけても意味がなく、アプリケーションのレベルで対処しなければなりません。 この手の問題は標準のクラスライブラリにもあって、古いコレクションクラス (Vectorなど)は、メソッドごとにちまちまとsynchronizedを付けていますが、 現実問題としてこれは無意味であり、後継のArrayListなどでは外されたわけです。 // ループが回っている間に別スレッドでremove()とかされると例外が発生する size = v.size(); for (int i = 0; i < size; i++) { Object o = v.get(i); } でも今Googleしてみたら、「シングルスレッドでよいときは効率向上のために ArrayListを使い、スレッドセーフにしたければVectorを使うべし」と解説している ページの多いこと… あんまり理解されてないことなんですかねえ。
[この投稿を含むスレッドを表示] [この投稿を削除]
[406] synchronizedメソッドの"変なこと"
投稿者:sgi
2007/02/20 02:13:25

こんにちは。はじめまして。 楽しく拝読させて頂いております。 「オブジェクト指向再入門/なぜわからなくなってしまうのか?」の中の記述に判らないところがありましたのでご質問させてください。 ~引用ここから~ ところで「Javaの格言」という本では、 Pointのx, yをprivateにするメリットとして、マルチスレッド時の排他制御を挙げています。しかし、getX(), getY(), setX(), setY() を作ってそれぞれをsynchronizedにしたところで、この仕様ではマルチスレッドには対応できません。ちょっと考えてみればわかるように、 getとsetが分かれていたり、setのXとYが分かれていたりしていたのでは、複数のスレッドで実行されたら結局変なことが起きます。 ~引用ここまで~ synchronizedメソッドをコールすると、コールしたスレッドがインスタンス(メソッドのレシーバ)のモニタを取得するために、別スレッドが当該インスタンスのsynchronizedメソッドを呼び出しても安全(スレッドセーフ)であると認識しております。 上記の引用のなかの"変なこと"というのが、私の認識であるところの"スレッドセーフ"でないことを指すのか、または別のことを指すのか判りませんでした。 もしよろしければ、可能性として起こりうる"変なこと"をご教示願えませんでしょうか? よろしくお願いします。
[この投稿を含むスレッドを表示] [この投稿を削除]
[405] Re:ページ移動の通知
投稿者:(ぱ)
2007/02/20 02:13:25

はじめまして。 >前橋さんのリンク先にある >「中野康明の雑学ペ-ジ(2003/11/30追加)」 >は下記に移動しました。 わざわざご連絡いただきありがとうございます。修正しておきました。
[この投稿を含むスレッドを表示] [この投稿を削除]
[404] ページ移動の通知
投稿者:中野康明
2007/02/20 02:13:25

前橋さんのリンク先にある 「中野康明の雑学ペ-ジ(2003/11/30追加)」 は下記に移動しました。 http://www001.upp.so-net.ne.jp/yasuaki/misc.htm その関連で引かれている「チョン」についての雑文のページも移動しました。 http://www001.upp.so-net.ne.jp/yasuaki/misc/lang/lang35.htm 修正戴ければ幸いです。
[この投稿を含むスレッドを表示] [この投稿を削除]
[402] Re:「C言語 ポインタ 完全制覇」
投稿者:G
2007/02/20 02:13:25

>これは、「Linkable」の定義に対する修正ですから、ひとつめの方です。 >Linkableは、その前のページのFig.5-15におけるLinkableShapeに対応する型で、 >ポインタを3つ持ち、双方向連結リストを構成します。 > >こちらは、双方向連結リストの先頭と末尾を保持することで、「リスト全体」を >表現する構造体です。 > これらが間違っていないのであれば、 私の勉強不足だとわかりました。 じっくりと勉強していきます。 >int a; >int *p; >p = &a; > >とあったとき、pに1加算するだけなら問題ないが、2加算すると規格違反である、 >という意味です。 ># ただし、たいていの処理系では、2だろうと3だろうと、加算するだけなら動きます。 わかりました。 ありがとうございました。
[この投稿を含むスレッドを表示] [この投稿を削除]
[401] Re:リバーシゲームのはさみ将棋への改造
投稿者:(ぱ)
2007/02/20 02:13:25

>>まず、「クラスのポインタ」が何を指すのか不明です。 >「Board* board = new Board()」の様にnewしたポインタ変数の事です。 クラスとインスタンスは別物なので、その違いは強く意識したほうがよいかと。 new Board()ではBoardクラスのインスタンスが生成(new)され、 「new Board()」という式はそのインスタンスへのポインタを返します。 上の「board」にはそれが代入されるわけですから、boardは、 インスタンスへのポインタであって、「クラスのポインタ」ではありません。 また、「newしたポインタ変数の事です」とのことですが、上の例にある ポインタ型の変数といえば「board」ですが、ここではboardがnewされている わけではありません。 細かいことを言うようですが、 「わかっている人が、厳密さを求められない局面で、適当に省略しながら話す」 のと、 「本当にわかってない」 のでは大違いですので一応念のため。 >僕の憶測ですが、Javaのリバーシゲームでthisを多用していますが、 >これは特に使用しなくていいんですね。 はい。インスタンスフィールドとローカル変数の区別をつけるため、 私はthis.をつけるようにしている、というだけです。 言語がthisを強制していてくれれば、こういう事故も起きないんですけどねえ。 http://d.hatena.ne.jp/higepon/20050329
[この投稿を含むスレッドを表示] [この投稿を削除]
[400] Re:「C言語 ポインタ 完全制覇」
投稿者:(ぱ)
2007/02/20 02:13:25

>こんにちは、はじめまして。 はじめまして。ミスが多く申し訳ありません。 >「 >p.285 >誤 > > typedef struct Linkable_tag { > void *object; > Shape *prev; > Shape *next; > } Linkable; > >正 > > typedef struct Linkable_tag { > void *object; > struct Linkable_tag *prev; > struct Linkable_tag *next; > } Linkable; >」 >とあります。 >しかし、P285にあるプログラムは2つあるのですが、 これは、「Linkable」の定義に対する修正ですから、ひとつめの方です。 Linkableは、その前のページのFig.5-15におけるLinkableShapeに対応する型で、 ポインタを3つ持ち、双方向連結リストを構成します。 >となっていて、2つめは >「 >typedef struct{ > Linkable *head; /* 先頭の要素 */ > Linkable *tail; /* 末尾の要素 */ >}LinkedList; >」 こちらは、双方向連結リストの先頭と末尾を保持することで、「リスト全体」を 表現する構造体です。 >それと、P43のところで、正誤表では、 >「 >と書いてありますので、ふたつ超えた所に向けない限り問題なさそうです。 >」 >となっていますが、本では、 >「 >と書いてありますので、2以上加算しないかぎり問題なさそうですが。 >」 >とあります。 同じ意味のつもりで書いていますが… int a; int *p; p = &a; とあったとき、pに1加算するだけなら問題ないが、2加算すると規格違反である、 という意味です。 # ただし、たいていの処理系では、2だろうと3だろうと、加算するだけなら動きます。
[この投稿を含むスレッドを表示] [この投稿を削除]
[399] Re:リバーシゲームのはさみ将棋への改造
投稿者:SFファン
2007/02/20 02:13:25

>「静的コール」というのが何を指しているのかわかりませんが、 「Board::move(~)」の様な呼び出しの事を指しています。名称は間違ってるかも知れません。 >まず、「クラスのポインタ」が何を指すのか不明です。 「Board* board = new Board()」の様にnewしたポインタ変数の事です。 「オブジェクトに仕事をさせる、ということ」を読ませて貰って、上記の様に一々ポインタ変数をnewせずにパラメータにポインタ変数を持たせて引き継がせればいい事が分かりました。 僕の憶測ですが、Javaのリバーシゲームでthisを多用していますが、これは特に使用しなくていいんですね。 現在、はさみ将棋プログラムに修正をかけていますが、まだまだメモリリークが起きている状態です。 指摘された修正をほぼ全て行なってメモリリークが起きるかどうかテストしたいと思います。 ご回答の程ありがとうございました。
[この投稿を含むスレッドを表示] [この投稿を削除]
[398] 「C言語 ポインタ 完全制覇」
投稿者:G
2007/02/20 02:13:25

こんにちは、はじめまして。 早速ですが、「C言語 ポインタ 完全制覇」を購入して 読んでいるのですが、正誤表を見てみると、 「 p.285 誤 typedef struct Linkable_tag { void *object; Shape *prev; Shape *next; } Linkable; 正 typedef struct Linkable_tag { void *object; struct Linkable_tag *prev; struct Linkable_tag *next; } Linkable; 」 とあります。 しかし、P285にあるプログラムは2つあるのですが、 1つめは、 「 typedef struct{ void *object; Shape *prev; Shape *next; }Linkable; 」 となっていて、2つめは 「 typedef struct{ Linkable *head; /* 先頭の要素 */ Linkable *tail; /* 末尾の要素 */ }LinkedList; 」 となっていてどこをどのように訂正すればいいかわかりません。 それと、P43のところで、正誤表では、 「 と書いてありますので、ふたつ超えた所に向けない限り問題なさそうです。 」 となっていますが、本では、 「 と書いてありますので、2以上加算しないかぎり問題なさそうですが。 」 とあります。 どちらが正しいのでしょうか? すべてをみたわけではありませんので、ほかはどうなっているのかわかりません。 出版は平成15年7月1日 初版 第7刷発行です。
[この投稿を含むスレッドを表示] [この投稿を削除]
[397] Re:リバーシゲームのはさみ将棋への改造
投稿者:(ぱ)
2007/02/20 02:13:25

>VC++はメソッドの静的コールをしようとすると怒られるので、 「静的コール」というのが何を指しているのかわかりませんが、 staticメソッド以外は、インスタンスがなければ呼び出すことはできないでしょう (Javaと同じです)。 >メソッドを呼び出す場合、そのクラスのポインタをnewしてますが、 >それがマズイ様です。 まず、「クラスのポインタ」が何を指すのか不明です。 Boardなりのクラスの「インスタンスのポインタ」の意味であるとすれば、 「メソッドを呼び出す場合、そのクラスのポインタをnewしてます」 というのは、私がこっちのページに書いた新人君の失敗と同じ失敗を しているように見えます。 http://kmaebashi.com/programmer/object/shigoto.html | そして、とある新人君は、(AWTの)Canvasに線を引きたい、という時、 | その場でCanvasをnewしてそのCanvasに線を引いてくれました。 | もちろんそのCanvasと、実際に画面に貼られているCanvasは違う | Canvasですから、画面に線は表示されず、彼は悩んでいたわけです。 | また別の新人君は、描画した図形を保持する「ShapeCollection」という | クラスについて、画面の再描画のため必要になったところでいきなりnewして | くれました。当然、新たに作り出されたShapeCollectionは空っぽなので、 | 画面には何も描画されませんでしたけど ※4。 手前味噌ですが、一度通して読んでみてはいかがでしょうか。 >クラスのポインタ変数を使用せずにこのプログラムを構築することは >出来るのでしょうか。 インスタンスへのポインタを使わずにこのプログラムを構築することは、 対戦用のBoardを静的に1個だけ持つようにして、先読み用のBoardを スタックに確保するようにすれば、不可能ではないでしょう。 でも、「対戦用のBoardを静的に1個だけ持つ」というのではせっかくの OO言語のメリットを捨てることになるので、あまりお勧めはしません。
[この投稿を含むスレッドを表示] [この投稿を削除]
[396] Re:リバーシゲームのはさみ将棋への改造
投稿者:SFファン
2007/02/20 02:13:25

指摘のあったcppをインクルードするのをやめ、プレイヤーもBoardのポインタを持つ様にしたのですが、メモリリークを起こしてしまってます。 VC++はメソッドの静的コールをしようとすると怒られるので、メソッドを呼び出す場合、そのクラスのポインタをnewしてますが、それがマズイ様です。 クラスのポインタ変数を使用せずにこのプログラムを構築することは出来るのでしょうか。 ご回答の程よろしくお願いします。
[この投稿を含むスレッドを表示] [この投稿を削除]
[395] Re:リンク切れの指摘
投稿者:(ぱ)
2007/02/20 02:13:25

はじめまして。 >「配列とポインタの完全制覇」のページを見ていたところ、 >“技術評論社さんによる書籍案内はこちら”のリンク先が移動しているようです。 ご指摘ありがとうございます。修正しました。 センス・オブ・プログラミング以外すべて貼り替えですね。 # ASPをPHPに切り替えたのか…
[この投稿を含むスレッドを表示] [この投稿を削除]
[394] リンク切れの指摘
投稿者:ふくはらかずろう
2007/02/20 02:13:25

「配列とポインタの完全制覇」のページを見ていたところ、 “技術評論社さんによる書籍案内はこちら”のリンク先が移動しているようです。 http://www2.gihyo.co.jp/books/bookinfo.asp?ID=4-7741-1142-2 だったのが、 http://www.gihyo.co.jp/books/syoseki.php/4-7741-1142-2 に、移動したようですね、、、
[この投稿を含むスレッドを表示] [この投稿を削除]
[393] Re:オレンジニュースにて
投稿者:(ぱ)
2007/02/20 02:13:25

>>ところで、「配列とガベージコレクタ」の「配列は参照型である」の説明で、 >>コードと図の配列の添字の値が食い違っているみたいです。 修正しました。 ついで…と言ってはなんですが、[329]で教えていただいた「ほげほっぽ」の件を、 「ほげを考えるページ」に追記しました。すっかり忘れていまして、対応が 遅くなりまして申し訳ありません (_o_)
[この投稿を含むスレッドを表示] [この投稿を削除]
[392] Re:オレンジニュースにて
投稿者:(ぱ)
2007/02/20 02:13:25

>オレンジニュースというサイトで、crowbarが紹介されていました。 > >http://secure.ddo.jp/~kaku/tdiary/20050426.html 情報ありがとうございます…が、さっきから試してますが、あっちのサーバが コケてるようですね。 >ところで、「配列とガベージコレクタ」の「配列は参照型である」の説明で、 >コードと図の配列の添字の値が食い違っているみたいです。 ご指摘ありがとうございます。 すみません、ちょっと今すぐは直せないので、連休に入ったら修正しておきます。 # 私も「1から数える」呪縛から開放されてないようです。
[この投稿を含むスレッドを表示] [この投稿を削除]
[391] オレンジニュースにて
投稿者:kei
2007/02/20 02:13:25

オレンジニュースというサイトで、crowbarが紹介されていました。 http://secure.ddo.jp/~kaku/tdiary/20050426.html > ■ 前橋和弥氏、新プログラミング言語「crowbar」を作る(現在ver.0.2) > http://kmaebashi.com/programmer/devlang/index.html ところで、「配列とガベージコレクタ」の「配列は参照型である」の説明で、 コードと図の配列の添字の値が食い違っているみたいです。
[この投稿を含むスレッドを表示] [この投稿を削除]
[390] Re:感謝
投稿者:タイガー
2007/02/20 02:13:25

>C++ は「必ずしもオブジェクト指向である必然が無い言語」ですからね。 >better C として使っても一向に構わないわけで。 > >template なんかも「オブジェクト指向」とはまったく反対方向からの >generic programming を目指す代物ですし。 > >std::vector<char> v; >std::copy(std::istreambuf_iterator(is), std::istreambuf_iterator(), std::back_inserter(v)); >とかなんとか。 >ジェネリック関数+ジェネリック部品、ってのはオブジェクト指向とは言いがたいし。 なるほど。あまり意識してなかったのですが、genericの機能は、オブジェクト指向とはあまり関係ないのかもしれませんね。 上記のリストのデータをトラバースするのにiteratorを使うのは、少なからずオブジェクト指向的であると思いますが、「genericの機能の部分」がオブジェクト指向であるとは言えないかもしれません。 でも、オブジェクト指向と連携すると強力な機能だと思います。 774RRさんのご指摘のように、オブジェクト指向を意識しない使い方でも、C++はかなり使えそうですね。 逆に私は、例えばCを使うときにはモジュール化を意識して、オブジェクト指向風なプログラミングをしています。
[この投稿を含むスレッドを表示] [この投稿を削除]
[389] Re:感謝
投稿者:774RR
2007/02/20 02:13:25

C++ は「必ずしもオブジェクト指向である必然が無い言語」ですからね。 better C として使っても一向に構わないわけで。 template なんかも「オブジェクト指向」とはまったく反対方向からの generic programming を目指す代物ですし。 std::vector<char> v; std::copy(std::istreambuf_iterator(is), std::istreambuf_iterator(), std::back_inserter(v)); とかなんとか。 ジェネリック関数+ジェネリック部品、ってのはオブジェクト指向とは言いがたいし。
[この投稿を含むスレッドを表示] [この投稿を削除]
[388] Re:感謝
投稿者:タイガー
2007/02/20 02:13:25

>C言語上級PGですが、VC++を使い始め、オブジェクト指向のさわりを勉強して >いる最中ですが、今までなかなか理解できませんでしたが、こちらのホームページを >穴が開くほど見つめて(=読んで)みたところ、一行一行、激しく首を振りながら、 >やっと理解し始めました。同時に、今まで読んでいた入門書、解説書等に腹が立って >きました。ただし、もう、それらの入門書、解説書を読んでもすらすらと読めるよう >になると思います。ありがとうございます。 C++関連の書籍では、オブジェクト指向の考え方を分かりやすく解説した本があまりありません。 どちらかと言うと、文法や実装面での解説の本が多いような気がします。 余計なお世話かもしれませんが、オブジェクト指向の基本を勉強したいのであれば、C++でもJavaでもオブジェクト指向の知識は同じなので、(ぱ)さんの書かれた、「Java謎+落とし穴徹底解明」をお勧めします。この本は、実装は確かにJava言語ですが、オブジェクト指向の基本的な考え方を扱っていると思います。 例えば、「Effective C++」では、オブジェクト指向を体系的に解説していないため、オブジェクト指向の基本を身につけるのは難しいかもしれません。 GoF本でも同様だと思います。 ちなみに、匿名さんが読まれた入門書、解説書は何というタイトルの本ですか?
[この投稿を含むスレッドを表示] [この投稿を削除]
[387] 感謝
投稿者:匿名
2007/02/20 02:13:25

C言語上級PGですが、VC++を使い始め、オブジェクト指向のさわりを勉強して いる最中ですが、今までなかなか理解できませんでしたが、こちらのホームページを 穴が開くほど見つめて(=読んで)みたところ、一行一行、激しく首を振りながら、 やっと理解し始めました。同時に、今まで読んでいた入門書、解説書等に腹が立って きました。ただし、もう、それらの入門書、解説書を読んでもすらすらと読めるよう になると思います。ありがとうございます。
[この投稿を含むスレッドを表示] [この投稿を削除]
[386] Re:hh
投稿者:(ぱ)
2007/02/20 02:13:25

>hh なんでしょう。これ。 テスト書き込みならテスト用掲示板のほうにお願いします。 http://kmaebashi.com/bbs/list.php?boardid=testbbs
[この投稿を含むスレッドを表示] [この投稿を削除]
[385] hh
投稿者:hh
2007/02/20 02:13:25

hh
[この投稿を含むスレッドを表示] [この投稿を削除]
[384] hh
投稿者:hh
2007/02/20 02:13:25

hh
[この投稿を含むスレッドを表示] [この投稿を削除]
[383] Re:エイプリルフール
投稿者:(ぱ)
2007/02/20 02:13:25

>>>この4/1に発表されたPhthonのエイプリルフールネタ >>空白文字の使い方に厳しい「新言語」が出来たのか!と思ってしまうまでした。 修正しました。 ううう。typoをネタにされてしまった… (;_;) 関係ないけど「思ってしまうま」でGoogleすると結構ひっかかりますね。 「思ってしまう。ま、…」ってのも多いですけど。 >新言語ってわけでもなさそうですよ。 > Phthon >http://www.google.co.jp/search?q=Phthon&start=0&start=0&hl=ja&lr=lang_ja&ie=utf-8&oe=utf-8&client=firefox-a&rls=org.mozilla:ja-JP:official とまあこのように誰にもでもあるポカということでひとつ。
[この投稿を含むスレッドを表示] [この投稿を削除]
[382] Re:エイプリルフール
投稿者:kei
2007/02/20 02:13:25

>>この4/1に発表されたPhthonのエイプリルフールネタ >空白文字の使い方に厳しい「新言語」が出来たのか!と思ってしまうまでした。 > 新言語ってわけでもなさそうですよ。 > Phthon http://www.google.co.jp/search?q=Phthon&start=0&start=0&hl=ja&lr=lang_ja&ie=utf-8&oe=utf-8&client=firefox-a&rls=org.mozilla:ja-JP:official
[この投稿を含むスレッドを表示] [この投稿を削除]
[381] エイプリルフール
投稿者:774RR
2007/02/20 02:13:25

>この4/1に発表されたPhthonのエイプリルフールネタ 空白文字の使い方に厳しい「新言語」が出来たのか!と思ってしまうまでした。
[この投稿を含むスレッドを表示] [この投稿を削除]
[380] Re:お邪魔しますー
投稿者:hairo
2007/02/20 02:13:25

>使用していただく分にはまったく問題ありません。あのソースのライセンスは、 >NYSL↓と思っていただいて結構です。 >http://www.kmonos.net/nysl/ > >ただし、Webページに乗っているものは、いろいろなバージョンが混在していますから、 >単純に貼っただけでは動かないと思います。その点はご承知おきください。 > レスありがとうございました。 確かに、貼り付けただけでは動きませんね^^; 自分のトコロに合わせてカスタマイズしたら動きだしました。 これから勉強しつつやっていこうと思います。 ありがとうございました。
[この投稿を含むスレッドを表示] [この投稿を削除]
[379] Re:教えてください。
投稿者:(ぱ)
2007/02/20 02:13:25

>M4sugar requires GNU M4. Install it before installing M4sugar or >bison: I/O error >set the M4 environment variable to its path name やや、うちではcygwinが入っているので気付きませんでした。 MinGWを使うなら、おそらくcygwinではなくてMSYSを使うのが普通なのでしょう。 後ほど書き加えておきます。情報ありがとうございました。
[この投稿を含むスレッドを表示] [この投稿を削除]
[378] Re:教えてください。
投稿者:タイガー
2007/02/20 02:13:25

>>m4をインストールして、M4環境変数を設定したらできました。 >前者があれば、後者はたぶん不要です。 >後者(環境変数 M4 を設定)が必要なのは m4 が標準でないところにインストールされている場合。 >cygwin setup で単純にインストールしたら標準ディレクトリに配置されるはずで、 >よって後者は不要のはずです (ウチではそうなっています) cygwinは、インストールしたことなく分からなかったので、 m4を単体でインストールしました。 デフォルトのパスで、C:\Program Files\GnuWin32\bin\m4.exe にインストールされました。 bison.exeも同一フォルダに入っています。 MinGWは、C:\MinGWにインストールしたのですが、この場合 m4をインストールすべき標準ディレクトリは、どこになるのでしょうか? C:\MinGW\binにm4.exeをコピーしても駄目でした。 初心者なので基本的な質問ですいません。
[この投稿を含むスレッドを表示] [この投稿を削除]
[377] Re:教えてください。
投稿者:774RR
2007/02/20 02:13:25

>m4をインストールして、M4環境変数を設定したらできました。 前者があれば、後者はたぶん不要です。 後者(環境変数 M4 を設定)が必要なのは m4 が標準でないところにインストールされている場合。 cygwin setup で単純にインストールしたら標準ディレクトリに配置されるはずで、 よって後者は不要のはずです (ウチではそうなっています)
[この投稿を含むスレッドを表示] [この投稿を削除]