- 1 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 23:26:08 ]
- エスケープシーケンスやWin32APIなどの環境依存な物でもOK。
ただしその場合、質問者は必ず、環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.40【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1184717430/ 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
- 643 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 19:19:25 ]
- >>642
やっぱりそういうこと? ストラウストラップの本とK&RとCの規格書調べたんだけど、それらしい記述を 見つけられなかったんだけど、どこかに明記されている?
- 644 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 19:26:25 ]
- =演算子が参照を返すからじゃね?
- 645 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 19:51:03 ]
- >>643
642じゃないけど C言語はJIS X 3010の.5.16代入演算子 代入式は、代入後の左オペランドの値を持つが、左辺値ではない。 C++は手元にあるのが15年前のARM日本語版しかないけど、5.17代入演算子 代入演算子の結果は、代入が行われた後に左のオペランドに格納してある値である。従って、結果も左辺値である。 Cの規格書って何を調べたの?
- 646 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 19:54:07 ]
- >>644
>>642
- 647 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 19:58:03 ]
- >>645
脳内
- 648 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 20:23:22 ]
- X3014にも5.17 1節目の最後に「結果は,左辺値とする。」と書いてある。
>>644 型と右辺値左辺値は別の段階の話。
- 649 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 20:33:34 ]
- 三項演算子で変数返すコード書いて左辺値にしても大丈夫
- 650 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 22:36:12 ]
- たくさんのレスthx
>>645 同じ規格書の同じとこ読んだんだけど、 代入式: 条件式 単項式 代入演算子 代入式 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ってなってたから、代入式ってのは上の3行目(波線部分)の代入式 のことを言ってるのかと勘違いしてた 単項式 代入演算子 代入式 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ これ全体を代入式と言ってるのか とすれば x = 1 という代入式の結果は左辺値ではないということに なるか 代入式は、代入後の左オペランドの値を持つが、左辺値ではない と書いてあるけど、代入式の結果は と書いてくれたほうがクリアになるなあ ~~~~~~~~~~~~~~~~~ BNF記法が分かってなかった >>648 なるほど C++のほうはEffectiveにも参照を返すと書いてあるから 理解できた C++の規格書も買うかな
- 651 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 22:42:13 ]
- 禿の本がまだなら規格書よりそっちを先に読んだ方がいいよ
- 652 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 22:46:24 ]
- >>650
知ってるかもしれないが、JISの規格書なら以下で参照できる。 日本工業標準調査会 ttp://www.jisc.go.jp/index.html C JISX3010 C++ JISX3014 検索できないのは最悪だけど。
- 653 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 22:49:36 ]
- >>651
調べ物するときは同じ内容について 色々な本に目を通してるんだけど、 結局、規格書に明記されてると確信に変わる んで安心できる 禿の本ってEffectiveのこと? 結構高度だから必要に応じて関連する項目を 潰していこうと思ってる
- 654 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 22:52:34 ]
- >>652
最初、Cの規格書もそこを見てたんだけど 検索できなくて疲れるから買ってしまった
- 655 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 22:59:44 ]
- 禿本 : Bjarne Stroustrup著 プログラミング言語C++
- 656 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 23:52:51 ]
- >>650
代入式の結果が左辺値か右辺値かは、構文から 決定できる問題ではないので、構文を記した部分は関係ないぞ。
- 657 名前:デフォルトの名無しさん [2007/08/26(日) 03:47:09 ]
- class Hoge{private:vector<CFoo> m_vecFoo;};
Hoge::Hoge(){ //落ちる場合1 CFoo foo = CFoo(age,sage); m_vecFoo.push_back(foo); //落ちる場合2 CFoo foo; foo = CFoo(age,sage); m_vecFoo.push_back(foo); //落ちない場合 CFoo* foo = new CFoo(age,sage); m_vecFoo.push_back(*foo) } あるクラスCFooについて、newでインスタンスを生成した場合は落ちないんですが、 newを使わないで直接生成した場合(そういうのをなんていうのか知りませんが) push_backの行で落ちてしまいます。一応どの場合もコンパイルは通ってます。 原因がまったく分からないのでエスパーしてください^^;お願いします。 デバッグ結果:xutilityファイル内↓ inline void __CLR_OR_THIS_CALL _Container_base::_Orphan_all() const { // orphan all iterators _Lockit _Lock(_LOCK_DEBUG); if (_Myfirstiter != _IGNORE_MYITERLIST) { for (_Iterator_base **_Pnext = (_Iterator_base **)&_Myfirstiter; *_Pnext != 0; *_Pnext = (*_Pnext)->_Mynextiter) (*_Pnext)->_Mycont = 0; ←この辺でとまってる模様 *(_Iterator_base **)&_Myfirstiter = 0; }
- 658 名前:657 mailto:sage [2007/08/26(日) 03:53:14 ]
- //さらにもう一個、落ちる場合
CFoo foo(age,sage); m_vecFoo.push_back(foo); ちなみに、push_backをコメントアウトして飛ばせば一応落ちないで動いてるようなので 落ちているのはpush_backの行みたいです。
- 659 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 05:25:40 ]
- その「あるクラス」がどんなものなのか説明しろよ。
ちゃんとコピーコンストラクタでディープコピーしてるかとか。
- 660 名前:デフォルトの名無しさん [2007/08/26(日) 09:15:04 ]
- >>659
すいません。力尽きて寝てました。 実際のCFooはでかいのでそのまま貼ることはできませんが、 ・コンストラクタの引数にポインタ型がある ・メンバにもポインタ型がある ・引数つきで生成されること前提なのでデフォルトコンストラクタとか作ってない ・唯一書いてある引数ありのコンストラクタは、メンバを初期化リストで初期化せずに コンストラクタの中身で初期化してる ・単純なGet〜みたいな関数はヘッダに直接書いてある この辺がなにか関係してるでしょうか?
- 661 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 09:36:45 ]
- レスに間が空いててもいいが、わざわざ寝てましたなどと言わなくていい
- 662 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 09:39:42 ]
- レスに間が空いててもいいし、わざわざ寝てましたなどと言ってもいい
- 663 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 09:43:44 ]
- >>660
>659の質問に答えたまえ。 コピーコンストラクタを設けていないのなら、C++を初歩から勉強しなおせ。
- 664 名前:デフォルトの名無しさん [2007/08/26(日) 09:51:36 ]
- ディープコピーって何ですか?
- 665 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 10:28:29 ]
- 本読め
Effective C++とかEffective STLとか
- 666 名前:657 mailto:sage [2007/08/26(日) 10:35:13 ]
- なんかポインタのメンバとかもってたりするクラスは
コピーコンストラクタなるものをきちんと実装しないと 値渡ししたりするときに問題が発生しやすいらしいので m_vecFooにはポインタを渡すことにしました。
- 667 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 10:38:42 ]
- 参照を参照のままコピーするのが浅いコピー
参照先を複製してコピーするのが深いコピー
- 668 名前:デフォルトの名無しさん [2007/08/26(日) 10:52:14 ]
- コピーコンストラクタを実装してなかったことが原因な気がしてきてはいるのですが
なぜpush_backの段階で落ちてるんでしょうか? 二重でdeleteされてるわけでもないし、理屈がわかりません。
- 669 名前:デフォルトの名無しさん [2007/08/26(日) 10:52:28 ]
- ディープキスって何ですか?
- 670 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 10:56:26 ]
- 保育園でするもの
- 671 名前:657 [2007/08/26(日) 10:59:13 ]
- >コピーコンストラクタなるものをきちんと実装しないと
>値渡ししたりするときに問題が発生しやすいらしいので 訂正ですが、ポインタのメンバを持ってるクラスの コピーコンストラクタをきちんと実装してない場合、 ”値渡しする段階”で問題がでるのではなくて、 ”後始末の段階”で二重のdeleteが起きたりするので危険なんですよね? なんでpush_backしただけで落ちるんでしょうか? どんな可能性が考えられますか?
- 672 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 11:10:13 ]
- とりあえず、デバッガで
本当に push_back の行で落ちてるのかどうか確認してみた方がいいんじゃない?
- 673 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 11:13:40 ]
- >>671
CFoo foo = CFoo(age, sage); CFoo bar = foo; とりあえずこのコードで落ちたりしないか?
- 674 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 11:23:30 ]
- あと、
>CFoo foo; >foo = CFoo(age,sage); これをちゃんと動かしたいなら、代入演算子も定義しとけ。
- 675 名前:デフォルトの名無しさん [2007/08/26(日) 11:38:52 ]
- >>672>>673
CFoo foo = CFoo(age, sage); CFoo bar = foo; としたらpush_backをコメントアウトしても落ちました。 ってことはやっぱりコピーコンストラクタなるものが きちんと実装されてないのが原因っぽいです。 でも実装してないときはコンパイラが勝手に作ってくれるんじゃないんですか? で、勝手に作られたものでは”破棄時”に問題がでるので、 自分でうまく実装しないと危険ってだけなんじゃないんでしょうか?
- 676 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 11:39:52 ]
- >>671
それはもちろんだが、その前に、解放済みの動的資源を参照するオブジェクト ができてしまうことがマズイだろ
- 677 名前:657 [2007/08/26(日) 11:43:25 ]
- あぁ、なんかコピーをした段階で落ちてるんじゃなくて、
一時オブジェクトが解放される段階で落ちてるみたいです。
- 678 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 11:44:10 ]
- >>656
式の結果が左辺値になるか右辺値になるかは構文ではなく 言語の仕様ということか それなら黙って認めるしかないから明白だ
- 679 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 11:47:02 ]
- >675
>自分でうまく実装しないと危険ってだけなんじゃないんでしょうか? その「危険」の内容が、落ちるってことだ。
- 680 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 11:49:39 ]
- 誰かスレッドについて教えてくれ。
自プロセスのスレッド数を CreateToolhelp32Snapshot、Process32First、Process32Next 使ってスレッド数を出力するだけのプログラムで なんでcntThreadsの値が8になるんだ? CreateThreadとかしてないのに・・・
- 681 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 12:00:10 ]
- 知らんけど、システム的なDLLの誰かが作ったスレッドなんじゃない?
- 682 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 12:09:32 ]
- >>680
お前がアホだから
- 683 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 12:11:02 ]
- 純粋に自分の作ったスレッドの数のみを知る方法ってないのかな?
- 684 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 12:11:39 ]
- >>680
せめて ttp://www.microsoft.com/technet/sysinternals/default.mspx あたりのツール使って、実際のスレッド数をまず確かめてはどうか?
- 685 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 12:11:47 ]
- ある
- 686 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 12:11:53 ]
- 自分で作ったのなら自分で管理して数えればいいじゃん
- 687 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 12:27:41 ]
- ProcessWalkerを使ってみたんだが、やはり複数立ち上がってる・・・
確かに自分で数えればいいんだが、 パフォーマンスログでスレッド数見ると 自分で立ち上げたスレッド数以上立ち上がってて たまに増減するんだよね。
- 688 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 12:28:33 ]
- だから何だ?チラシの裏にでも書いてろ。
- 689 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 12:36:37 ]
- そりゃ裏でスレッドを作られったって、それはWin32の勝手だろうに。
- 690 名前:デフォルトの名無しさん [2007/08/26(日) 13:03:42 ]
- C/C++の文法自体は大体理解できたが、大規模なプログラムの作り方が
さっぱり分からん 大規模なものだと、だいたいフォルダごとに纏められていて総数数百、数千のファイルがあるが どのような感じでそんな構造をつくっていけばいいのかさっぱりです。 Webにはどこも同じような、内容ばかりポリモを動物を使っての説明w 結局みんな大規模なものはかけないのかな?
- 691 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 13:07:39 ]
- はは
- 692 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 13:09:43 ]
- >>690
大規模っつーことで複数人での開発を想定するが 個人的にはプロセスやDLL等の境界で切ってあるほうがずっとやりやすかったかな 切らないんなら、適切にスタブを作るのが常套かと思う Facadeなどの下に隠すのも良い 画面がいっぱいあるだけの良くある業務系なら、それぞれの画面に飛べるように なっていて、それぞれが独立していれば概ね問題は無い まあ所詮ケースバイケースで王道は無いだろ 「銀の弾丸はない」のだと知れ
- 693 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 13:10:03 ]
- 大規模なプロジェクトと動物ポリモとどういうつながりが?
- 694 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 13:20:38 ]
- >>687
オーディオデータとか動画扱ってる場合とかWindowsが勝手にスレッド作る場合はよくあるお
- 695 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 13:25:54 ]
- >>675
>でも実装してないときはコンパイラが勝手に作ってくれるんじゃないんですか? 各メンバのコピーコンストラクタを呼び出す、というコピーコンストラクタを作ってくれる。 同様に代入の場合は各メンバに対しoperator=を呼ぶ。 メンバにポインタがある場合ポインタがコピーされるだけで、ポインタが指す先は複製されない。
- 696 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 13:30:15 ]
- まーメンバがコピーコンストラクタが上手く動くクラスとポインタ以外の
基本型だけならデフォのコンストラクタで問題ないことも多い ポインタ生のままで保持せずにboost::shared_ptrでくるんだりしてれば 適切に参照カウント処理してくれる そうでないならちと考えろってこった
- 697 名前:デフォルトの名無しさん [2007/08/26(日) 13:31:27 ]
- >>693
私が言いたいのはWebで恰もC++知ってますみたいな講座書いてる奴の大半は 動物ポリモみたいなことかいてるだけで実用的なことは一切出来ないのかな? と思っただけですよ
- 698 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 13:33:05 ]
- しらねぇ
つーかどうでもいい 動物ポリモは確かにくだらねぇしオリジナリティはねぇな
- 699 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 13:37:16 ]
- 初心者の為に端折って説明してるだけなんだよ
- 700 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 13:39:50 ]
- あれで初心者が解るのか疑わしい
- 701 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 13:42:37 ]
- わからなかった?
精進するよ
- 702 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 13:44:29 ]
- >>697
動物ポリモみたいなこと書いてないで君もさっさと大規模なもの作れる頭持つか諦めなさい。
- 703 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 13:50:52 ]
- そうだね
スレ汚しすまそ
- 704 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 14:26:55 ]
- 逆に実用的でコーディング時の仕様に依存しないポリモーフィズムってなに
- 705 名前:デフォルトの名無しさん [2007/08/26(日) 14:30:57 ]
- まだ、いってんの?
C++ 講座 で検索してみなよ どこもおなじようなことしか書いてないからw
- 706 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 14:35:06 ]
- そりゃC++ 講座だもん
- 707 名前:デフォルトの名無しさん [2007/08/26(日) 14:41:55 ]
- 偉そうに書いてるわりには、実際に作ったソフトを公開してる人いないよね
実際はC++の文法だけしか理解できていない可能性高し
- 708 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 14:42:57 ]
- だからなんだよ?どうでもいいだろ?
チラシの裏にでも書いてろよ。
- 709 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 14:45:45 ]
- 有能だけどそこまで親切じゃない人もいるんだよ
- 710 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 14:54:36 ]
- >>707はアホそうに書いてるだけで、実際に作ったソフトを公開してないよね
実際はC++の文法ですら理解できていない可能性高し
- 711 名前:デフォルトの名無しさん [2007/08/26(日) 14:56:11 ]
- 大規模な開発なんて経験つんでやっていくものじゃないの
Webのしかも言語自体の解説に何期待してんだか
- 712 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 14:57:08 ]
- >>707
遊びの延長や使い捨てや自分専用で作るのと 公開するソフトを作るのではかかる手間が桁違いだろ
- 713 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 15:06:54 ]
- 公開ライブラリを作ってる人達の実力は底が知れない
具体的にいうとboost関係の人達
- 714 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 15:23:49 ]
- 知れるかどうかって話で言うと、何も公開していない人のほうが底が知れないね。
- 715 名前:デフォルトの名無しさん [2007/08/26(日) 15:25:40 ]
- >>713
そうか? 以前正規表現を使いたくてboostを使ったが速度でイマイチだったから 自前で実装したけど?
- 716 名前:デフォルトの名無しさん [2007/08/26(日) 15:30:47 ]
- >>715
そうか? 以前正規表現を使いたくてお前のを使ったが速度でイマイチだったから 自前で実装したけど?
- 717 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 15:32:20 ]
- どうでもいから出て行ってくれないかな。
- 718 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 16:38:43 ]
- boostはC++の実験場だから
チューニングはしてないよ
- 719 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 17:18:01 ]
- チューニングに関する実験でもチューニングしてないよ
- 720 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 18:59:25 ]
- boost::uniform_01< boost::mt11213b, float > rnd( boost::mt11213b( (unsigned long)(time(0)) ) );
oven::random_shuffle( vec, _1 * rnd() ); // std::random_shuffle( vec.begin, vec.end, _1 * rnd() ); std::random_shuffleの乱数生成関数オブジェクトにboost::uniform_01を使ってみたんですが なんかうまくばらけてくれませぬ というわけでstd::random_shuffle用のいい乱数発生方法を教えてください
- 721 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 20:48:44 ]
- Boostなんてたいしたこと無いだろ
これが一番典型的な例 ____ progress_ |← reject| boostの中の人 display ユーザー . ̄.|| ̄ ̄ ┗(^o^ )┳(^o^ )┳(^o^ )┛≡=- || ┏┗ ┗┗ ┏┗ ≡=-  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
- 722 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 20:58:05 ]
- それがboostの典型なら、boostの中でrejectされたりしないだろう。
boostの中で平均的に評価されているものが、他との比較でreject扱いになって 初めて「boostなんてたいしたことない」になる。
- 723 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 22:35:06 ]
- progress.hppには
まるで役に立たないprogress_displayと すごく役に立つprogress_timerが同居しています そんな兄弟いますよね
- 724 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 23:18:30 ]
- Visual Studio .NET 2003環境の問題について教えてください。
アラビア語リテラルの入った.ccのソース(MySQL)のコンパイルが出来ません。 error C3209: '・ァル館・' : Unicode 識別子は現在サポートされていません。 というエラーが表示されます。(ソースUTF8の場合) 秀丸でShift-JISにしたり、UTF8にしたりしたのですが、どちらもエラーでした。 VSのエディターではShift-JISの場合、アラビア語が文字化けもなく表示されます。 (UTF8では文字化けして表示されます。) 2時間くらいググッても分かりませんでした。 この問題の解決法を教えてください。 エロイ人お願い!
- 725 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 23:21:48 ]
- >>724
VC が UTF-8 を認識できてないんだろ。どうやるのか知らんけど。 Shift_JIS でアラビア語が扱えないのは確実。
- 726 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 23:26:42 ]
- 英語版に言語パック入れたら?
- 727 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 23:29:28 ]
- BOMつきUTF-8ってVS2003で食えたっけ
VS2005なら大丈夫のはずだが リテラルはワイド文字なのか? そうだと仮定すると、ソース修正して 16進でUnicodeのコードポイントを記述してやるのが一番手早い Perlか何かを使えば簡単だろ
- 728 名前:724 mailto:sage [2007/08/26(日) 23:45:35 ]
- 素早いレス、感謝感激です。
>>725 アドバイス、d。 どこで聞けば分かりそうですか?ご存じでしたら教えてください。 オプションやらヘルプやら一通り見てみたのですが、分かりませんでした。 >>726 ちょっと難しそうです。d。 >>727 > BOMつきUTF-8ってVS2003で食えたっけ BOMつきかどうかを確認する方法をご存じでしたら教えてください。 > リテラルはワイド文字なのか? リテラルはワイド文字です。 確かにソース修正が一番簡単ですね。 ただ、ソースの下の方を見てみたら、ヒンディ語・ヘブライ語・・・と限りなく続いてますので、結構大変かも。
- 729 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 23:51:04 ]
- >>728
BOMを確認したければファイルの先頭をバイナリエディタで見てみろ。 BOMつきでなければ、VS2005でも食えない。 ワイド文字リテラルなら、話は簡単だな。 手でやらずに簡単なフィルタープログラムを書いて、機械的に変換してしまえ。 そんなら多国語でも関係ない。
- 730 名前:デフォルトの名無しさん [2007/08/26(日) 23:55:03 ]
- 助けて!以下のプログラムでメモリがおかしくなるお!
分母150 試行回数100000で繰り返すとなるお! 助けて! #include <stdio.h> #include <stdlib.h> #include <time.h> int main() { int i,j,dom,cnt,max,ret,k; int ch; int array[128]; int over, less; long int times; i = j = k = dom = cnt = times = max = 0; printf("input dominator >"); scanf("%d", &dom); printf("input times >"); scanf("%ld", ×);
- 731 名前:730続き [2007/08/26(日) 23:55:39 ]
- LOOP:
k = 0; over = less = 0; while(getchar() != '\n'); printf("dominator = %d times = %d\n", dom, times); sleep(1); srand(time(NULL)); for(i=0; i<times; i++){ cnt++; ret = rand() % dom; if(ret == 7){ array[k] = cnt / 100; array[k]++; k++; array[k] = -1; printf("%d\n", cnt); if(cnt > max){ max = cnt; } if(cnt > dom){ over++; } else{ less++; } cnt = 0; } }
- 732 名前:730続き [2007/08/26(日) 23:56:15 ]
- for(i=0; array[i] != -1; i++){
for(j=0; j<array[i]; j++){ printf("*"); } printf("\n"); } printf("MAX = %d\n", max); printf("OVER = %d ELSE =%d\n", over, less); printf("%d/%d\n", over+less, times); printf("%f\n", times / (double)(over + less)); printf("Retry ? (y/n) >"); ch = getchar(); if(ch == 'y' || ch == 'Y'){ goto LOOP; } return 0; }
- 733 名前:730 [2007/08/26(日) 23:56:54 ]
- このままじゃパチンコで勝てないお!
助けてお!
- 734 名前:デフォルトの名無しさん [2007/08/27(月) 00:00:33 ]
- こんなプログラム書いて何になるの?
- 735 名前:デフォルトの名無しさん [2007/08/27(月) 00:01:41 ]
- >>734
>>733
- 736 名前:724 mailto:sage [2007/08/27(月) 00:01:41 ]
- >>729
ありがd。見てみたら、BOMついてませんね。 付けてオンパイルしてみます。ノシ
- 737 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 00:04:27 ]
- >>730
ざっとみだけど >int array[128]; が足りてないだけじゃないの?
- 738 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 00:06:54 ]
- >>730
メモリをケチるな! array[128] → array[2048] 期待値は (1/150)*100000=666.67
- 739 名前:730 [2007/08/27(月) 00:10:46 ]
- できたおおおおおおおおおお!
これで勝てるお!
- 740 名前:730 [2007/08/27(月) 00:11:55 ]
- 期待値の詳細希望
- 741 名前:730 [2007/08/27(月) 00:14:06 ]
- なるほどお!ボヌスが666.67回くるってことかお!
ありがとお!
- 742 名前:730 mailto:sage [2007/08/27(月) 00:17:43 ]
- やっぱりすごいお
さっぱりわからなかったのに すぐ回答がきたお どうしたらそうなれるかお?
- 743 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 00:20:17 ]
- >>742
毎日2時間、電灯のヒモでボクシング。これを1年続けること。
- 744 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 00:21:02 ]
- みんな半年から1年ぐらい
アーバンチャンピオンと スパルタンXで鍛えてるはず
- 745 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 00:26:58 ]
- >>740
100000回×(1/150)=666.67回 kがインクリメントされるわけだから array[k]はarray[668]って式で参照される可能性があるわけで array[128]と宣言したのではあきらかに足りないってことなんではないかと>期待値云々 こういう実行時に入力される値に依存するような大きさの配列はメモリの動的確保で扱うべきだとは思うけどね
- 746 名前:724 mailto:sage [2007/08/27(月) 01:39:46 ]
- >>736
ファイルの先頭にBOM(というか、ZERO WIDTH NON-BREAKING SPACE。ef bb bfの3バイト)を付加したら 無事、オンパイルできました。
- 747 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 01:42:28 ]
- >>746
いや、ファイル先頭にある場合、つまりBOMである限り、 それはBOMであってZERO WIDTH NON-BREAKING SPACEとは言わないんだ。
- 748 名前:724 mailto:sage [2007/08/27(月) 02:02:45 ]
- >>747
添削ありがd。 WikipediaのUTF-8(ja.wikipedia.org/wiki/UTF-8)のところに記述がありました。 > プロトコルが常にUTF-8である事を強制しているものである場合はBOMを禁止するべきで、 > この場合ファイル先頭のBOMは "ZERO WIDTH NO-BREAK SPACE" と見なされる。 > 逆にプロトコルがそれを保証しない場合BOMは禁止されずファイル先頭のそれはBOMと見なされる。(tools.ietf.org/html/rfc3629#section-6) 2文目ですね。
- 749 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 10:40:28 ]
- www.vista-osx.com/kensaku.htm
- 750 名前:デフォルトの名無しさん [2007/08/27(月) 15:06:25 ]
- ヘッダファイルの書き方について質問です。
自分で複数ファイルのプログラムを作ったとき、 たとえば、mian.c , sub.c , sub.h という3つのソースファイル からなるプログラムの場合、 $ gcc main.c sub.c としますよね。 でも#include<stdio.h>などでは、 stdio.hにはプロトタイプ宣言しか無くて、printf( );とかの定義が無いはずなのに $ gcc main.c stdio.c などとしなくてもいいのはなぜですか?
- 751 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 15:09:05 ]
- パス通ってるからじゃないん?よーわからんけど
- 752 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 15:11:52 ]
- 引数で指定しなくてもリンクされるようになってるから。
- 753 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 15:17:52 ]
- C++のvector配列って結構処理重いんでしょうか。
10MB前後のテキストデータをmallocしたポインタ読み込んで、区切り文字単位に編集・分解していった場合と、 stringに読み込んでからvector<string>に編集・分解していった場合で、 処理時間が前者が約25秒、後者が約60秒掛かったのですが、こんなもんなんですかね。
- 754 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 15:28:49 ]
- コードplz
- 755 名前:デフォルトの名無しさん [2007/08/27(月) 15:34:02 ]
- vector に malloc なんか使ってるから・・・
- 756 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 15:36:15 ]
- >>753
vector<string>版も意外に速いなw STLコンテナは基本的に値を保持するんで、その場合はstringのインスタンスを コピーしまくることになる ポインタだけで操作すれば格段に速いのは当たり前だ vector<>が遅いというよりはメンバのコピーに時間がかかっているだけなので、 そこが性能のボトルネックになっているのなら、 vector<char*>でポインタを保持するなり vector<int>でインデクスを保持するなりするとよいだろう
- 757 名前:753 mailto:sage [2007/08/27(月) 15:45:43 ]
- >>756
なるほど、言われてみればインスタンスのコピー云々で納得です。 御指導ありがとうございましたm(_ _)m
- 758 名前:デフォルトの名無しさん [2007/08/27(月) 16:01:38 ]
- 質問です。
i = (char*)malloc(sizeof(char) * 256); でメモリ領域を確保したのですが、256バイト以上使用することができます。 なぜでしょうか?教えてください
- 759 名前:デフォルトの名無しさん [2007/08/27(月) 16:03:02 ]
- >>758
たまたま
- 760 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 16:07:29 ]
- >>758
本来アクセスしちゃいけないところにアクセスしてるだけ CはC#などとは違ってそんな事しても例外は発生しないし たまたま何のエラーも出ない事がある だからってそんな事やってたらきっとそのうちクラッシュするよ
- 761 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 16:10:57 ]
- >>758
一般的にmallocは、予めOSから確保しておいたでっかいメモリの塊から 必要な分だけを切り分けて自身の戻り値にしている(残りは次回以降のmallocなどで使う)。 理由は、OSのメモリ確保処理が大抵大容量の確保に向いていて小回りが利かないから。 そういうわけでその256バイトの後ろにも、OSから見れば アプリケーションが確保した(実態はmallocが抱えていたり 他のmallocなどの呼出で使われている)メモリ空間が広がっている。 だから一見256バイトの後ろも読み書きできるように見えるというわけ。
- 762 名前:デフォルトの名無しさん [2007/08/27(月) 16:16:24 ]
- 758です。
勉強になりました。 ありがとうございます。
- 763 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 16:19:05 ]
- 運が悪いと範囲外に書き込んだときに他の変数の値書き換えたりすることがあるから範囲外アクセスはNGよ
- 764 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 20:10:51 ]
- 質問させて頂きます。
現在UNIX環境でコンソールベースのプログラムを組んでいるのですが CUIからメニューの操作、カーソル操作の為のエスケープシーケンスに悩んでおります コンソールベースのプログラム自体あまり組んだ事ないのですが CUIからメニュー操作というのは可能なのでしょうか?
- 765 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 20:16:05 ]
- 環境によるかもだけど、ncursesとか調べてみると幸せになれるかもしれない。
- 766 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 20:27:24 ]
- >>764
こんなのでいいなら簡単にできるけど エスケープシーケンスの設定が済んでいることが前提 #include <stdio.h> int main(void){ int i, x, y; printf("\x1b[2J"); // clear screen for(i=1;i<=9;i++){ x=i; y=(i%2)+1; printf("\x1b[%d;%dH", y, x); // cursor move printf("%d", i); } return 0; }
- 767 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 20:31:35 ]
- malloc使う奴はクソだとか言われる事が増えてきてる中、このスレは落ち着きますね…
- 768 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 20:34:39 ]
- まじで?そんなこと言う奴がいるのか・・・
- 769 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 20:52:36 ]
- vector型の配列をランダムに並び替えるには自前で作るしかないですかね?
- 770 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 20:56:12 ]
- std::random_shuffle だっけ
- 771 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 21:25:47 ]
- >>770
ありがとうございます
- 772 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 22:44:37 ]
- >>765-766
有難うございます。 ncursesについて詳しく調べて見たいと思います。 エスケープシーケンスからの操作なのですが、設定とはどう行うかご教授願えないでしょうか? 検索しても見つからなくてorz
- 773 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 22:51:24 ]
- >>772
UNIX環境なら使うターミナルを選ぶだけかな… MS-Windows環境なら ansi.sys を読み込ませる
- 774 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 22:53:34 ]
- >>772
TERM環境変数 普通はシェルの初期化スクリプトなどで設定するが、 普通にシェルを操作できてるんなら、まあ大丈夫だろう
- 775 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 23:01:57 ]
- >773
えー。それって、Windows環境で、DOS-Exeを動かす場合だけでそ。
- 776 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 23:12:20 ]
- >>773-775
有難うございます。 凄く勉強になります。 ご教授して頂いた所を詳しく調べてみたいと思います。
- 777 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 23:48:42 ]
- >>775
bashとかでもあるよ。
- 778 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 23:54:03 ]
- だれか俺にbashとansi.sysの関係を教えてくれ。
- 779 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 23:58:10 ]
- すまん。レス番見間違えた。
- 780 名前:デフォルトの名無しさん mailto:sage [2007/08/28(火) 03:00:09 ]
- プログラム初心者なのですが,助けてください.
VC++2005Express,WinXP Pro環境で, コンソールアプリケーション上でWM_TIMERを使いたいのですが, 調べてみると不可視ウィンドウを作れば良いと書かれていました. そこで,以下のようなウィンドウを生成しているのですが,うまく動きません. ご教授いただけないでしょうか? HWND Create(){ WNDCLASS wcHide; HWND hwndHide; // ウィンドウクラス wcHide.style = 0; wcHide.lpfnWndProc = (WNDPROC)MWndProc; wcHide.cbClsExtra = 0; wcHide.cbWndExtra = 0; wcHide.hInstance = (HINSTANCE)GetModuleHandle(NULL); wcHide.hIcon = NULL; wcHide.hCursor = NULL; wcHide.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wcHide.lpszMenuName = NULL; wcHide.lpszClassName = ""; hwndHide = CreateWindow ( wcHide.lpszClassName, "", WS_DISABLE, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, HWND_DESKTOP, NULL, wcHide.hInstance, 0); }
- 781 名前:780 mailto:sage [2007/08/28(火) 03:01:24 ]
- LRESULT CALLBACK WndProc( HWND hWnd, UINT iMessage, WPARAM wp, LPARAM lp)
{ switch ( iMessage ) { case WM_CREATE: SetTimer(hWnd , 5000 , 1 , NULL); return 0; case WM_TIMER: printf("test\n"); return 0; } return 0; } とりあえず,5秒毎に"test"を出力できるようにしたいのですが, よろしくお願いします.
- 782 名前:デフォルトの名無しさん mailto:sage [2007/08/28(火) 03:04:49 ]
- www.google.co.jp/search?q=%E3%81%94%E6%95%99%E6%8E%88&btnG=%E6%A4%9C%E7%B4%A2
うまく動かないってのはどんな状況?
- 783 名前:780 mailto:sage [2007/08/28(火) 03:20:40 ]
- 正しくはご教示でしたか
間違えて使っていました.ありがとうございます. >うまく動かないってのはどんな状況? 何も表示されずに終了してしまいます. 以下を試してみましたが何も表示されませんでした. ・main文でCreate()を呼び出した後にwhile(1)やsleepをはさんでみる ・WndProc()関数の最初にprintfでチェッカーをはさむ よろしくお願いいたします.
- 784 名前:デフォルトの名無しさん mailto:sage [2007/08/28(火) 03:23:52 ]
- >>780
メッセージループはあるか? なければググれ
- 785 名前:デフォルトの名無しさん [2007/08/28(火) 03:32:35 ]
- ウィンドウクラスの名前が無い。
RegisterClassしてない。 SetTimerの第2引数と第3引数が逆とか、 ウィンドウプロシージャで自分で処理しないメッセージをDefWindowProc()に渡してない。
- 786 名前:780 mailto:sage [2007/08/28(火) 03:40:59 ]
- >>784
ありがとうございます. ありません.早速ググってみました. >>785 ありがとうございます. 調べてみます.
- 787 名前:780 mailto:sage [2007/08/28(火) 04:42:09 ]
- >>784
>>785 ありがとうございました. ご指摘の通り,メッセージループ,RegisterClass,DefWindowProc() 全てを書いたところ,意図した動きをしました. お世話になりました.
- 788 名前:デフォルトの名無しさん mailto:sage [2007/08/28(火) 05:41:34 ]
- ちょっと質問。
・外部ハードからデータを所得(配列に格納)し、そのデータ長に数値計算を施し結果を画面上に表示させたい この動作で、随時変化しているデータ長の所得・数値計算・グラフ描画、 この3つを同時?(なるべくリアルタイムにあるデータ長の数値計算結果をグラフ描画)したいんだけど、 こういう場合ってどんな風に処理・流れにさせればいいの? 例えば、マルチスレッド(出来るかどうかよくわかりませんが)を使って データ所得→計算→描画 | →データ所得→計算→描画 | →データ所得→計算→描画 こんな感じで計算させつつデータを所得。描画させつつ計算。みたいに出来ますか?
- 789 名前:デフォルトの名無しさん mailto:sage [2007/08/28(火) 05:56:44 ]
- 所得
- 790 名前:デフォルトの名無しさん [2007/08/28(火) 06:00:16 ]
- データ所得税
- 791 名前:788 mailto:sage [2007/08/28(火) 06:06:24 ]
- すんません。取得の間違いでした
- 792 名前:デフォルトの名無しさん mailto:sage [2007/08/28(火) 08:23:36 ]
- その程度なら今のPCは十分に早いから
データ所得→計算→描画→データ所得→計算→描画 で十分じゃね? データ取得に時間掛かるならデータ取得部分だけ別スレッドで回した方がいいけど。
- 793 名前:デフォルトの名無しさん mailto:sage [2007/08/28(火) 18:09:00 ]
- 典型的なProducer-Consumerパターンでないの?
- 794 名前:デフォルトの名無しさん mailto:sage [2007/08/28(火) 22:40:45 ]
- >>788
出来る出来ないで言えば、出来ると思う。 どっちかいうと、例えばデータをファイルに書き込んでるなら、 データ書き込みとデータ読み出しの排他処理してるだろうから、 あんまり頻繁に読み出しに行くとデータ更新を阻害しそうで そっちの方が怖い。
- 795 名前:デフォルトの名無しさん mailto:sage [2007/08/28(火) 22:47:05 ]
- >>788読む限りでは出力先は画面でないの
ファイルに書き戻したりしてないように見えるけど
- 796 名前:デフォルトの名無しさん mailto:sage [2007/08/28(火) 23:53:55 ]
- Windows SDKの_msize()で、callocした領域のサイズを見ようと呼び出したのですが、
呼び出した行でプロセスが停止してしまいます。 エラーも何も帰ってこず、前の行のprintfは呼ばれて、次の行のprintfは呼ばれていないという 状況です。_msize()の説明を見ると、動的確保されていない領域でも エラーが帰ってくるみたいですが… こういった症状聞いたことある方いませんか? VC6でデバッグビルドです。よろしくお願いします。
- 797 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 00:09:09 ]
- ぬるぽではないのか
- 798 名前:796 mailto:sage [2007/08/29(水) 00:11:55 ]
- ガッ
- 799 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 00:13:31 ]
- 引数に入れてやったポインタがNULLを指してるってことでしょうか
今環境がないので試せないですが、if ( p == NULL ) とかで見てみます
- 800 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 00:14:12 ]
- だめだこりゃ
- 801 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 00:16:09 ]
- ?
違うんですか?
- 802 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 00:17:38 ]
- 違う
- 803 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 00:19:45 ]
- よくわからないので教えて貰えませんか?
_msizeの戻り値を参照してるところで止まってる訳でもなく、 _msize自体で止まるので、引数として渡してやったポインタがNULLなのかと思ったのですが
- 804 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 00:25:12 ]
- >>803
NULLに対する対処くらいしていてもよさそうだけど
- 805 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 00:31:07 ]
- >>804
よく読んでみれば、 この関数は、パラメータを検証します。memblock が null ポインタの場合、 「パラメータの検証」に説明されているように、_msize は無効なパラメータ ハンドラを 呼び出します。エラーが処理されると、この関数は errno を EINVAL に設定し、-1 を返します。 とのことなので、-1が返ってくるようですね。 ぬるぽってヌルポインタ(Javaとかだとヌル参照例外)のことですよね? 引数のポインタがNULLでも動くなら、>>797は何について仰ってるのでしょうか?
- 806 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 00:31:26 ]
- >>803
試しに_msizeの引数にNULL入れたら、Assert出て落ちた。 VS2005 Standard Edition 「止まる」というのは、関数から戻って来ないのか、不正終了するのか、どっち?
- 807 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 00:35:00 ]
- ねるぽ
- 808 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 00:37:28 ]
- 確認しないとわからないかも…
というのは、Windowsのサービスとして動かしてるのです。 サービスでも普通のプログラムと同じようになんかダイアログでて 落ちるのなら前者の関数から戻ってきてないのだと思いますが、 出なくて静かに落ちるなら、タスクマネージャからプロセスが生きてるか確認しないとわからないかも >>796のそこで止まるというのは、_msizeを挟んで呼び出し前と呼び出し後を ログに吐かせたときに、呼び出し前までしか吐かれてなかったのです。 Assert出て落ちるのなら、プロセスが静かに死んでそうな気がしてきました。
- 809 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 00:39:32 ]
- 確認してなかったのか
- 810 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 00:40:17 ]
- ウザ〜イ!ウザイよ小沢さん。想像で答えられてもウザ過ぎるよ。
- 811 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 00:49:13 ]
- まぁ「初心者歓迎」ってついとるし、初心者はバグの見所もわかんねだろ。
免罪符にゃならんが。 そこら辺分からんと答えよう無いしな。
- 812 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 00:49:15 ]
- そこだけ切り出してコンソールアプリにでもしてみれば。
NULLじゃないけど IsBadReadPtrに引っかかるポインタとか
- 813 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 06:40:31 ]
- サービスであっても、デバッガアタッチするといいb
- 814 名前:デフォルトの名無しさん [2007/08/29(水) 13:31:03 ]
- >>805
本当によく読んでるのか? > _msize は無効なパラメータ ハンドラを呼び出します。 無効なパラメータ ハンドラが何やるかしってるか? > 無効なパラメータが見つかると、C ランタイムは、 > 現在割り当てられている無効なパラメータ ハンドラを呼び出します。 > 既定により無効とされているパラメータが見つかった場合、 > ワトソン博士のクラッシュ レポートが起動します。 > 実行中のアプリケーションはクラッシュし、分析用のクラッシュ ダンプを > Microsoft に提供するかどうかをユーザーに求めるメッセージが表示されます。 > デバッグ モードでは、無効なパラメータが見つかるとアサーション エラーになります。
- 815 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 20:48:30 ]
- かなり初歩的な質問で申し訳ないんだけど
現在VC++ 2005 Express Editionで開発中で、所謂多重定義の問題にハマっています Formアプリで、複数のFormをどんどん遷移していくような感じなのですが イメージとしては、ATMのような、各画面1クリックでどんどん進むようなので、それぞれの画面が 個別のFormとして作られています。 (Form1がForm2を作って、Form2が3を・・のような) で、聞きたい事は、VC++2005ExpEditでは、Formを作ると、そのclassの定義がすべてForm1.h のように、ヘッダファイルに書かれてしまいます。 このとき、Form1とForm2で相互にincludeしたい場合、多重includeガードをしても、定義のせいで リンクがエラーになり、コンパイルが通りません。 いちいちForm1.hの中身を.cppにコピペし、宣言のみを.hに書き直すようなことをしなければいけないのでしょうか うまい回避方法があれば教えてください。 (長文すみません)
- 816 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 21:58:45 ]
- C++/CLI?
- 817 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 22:02:03 ]
- API直で叩けばいいんじゃね?
- 818 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 22:25:54 ]
- stlのstring使っています。
このstringを1行ごとに読み込んで処理したいのですが、どのようにすればいいでしょうか? tokenが使えないので、ちょっと苦労しています。一旦とってきたstringをcharに変えるのも、どうかなぁ……って気がしますし、 できれば、stringのままで一行ごとの読み込みがやりたいんですが、やり方を教えてください。 VC++2005 WinXPHomeです。
- 819 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 22:32:43 ]
- findとかiteratorで改行しらべる
- 820 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 23:01:37 ]
- >>815
#ifndef Form1_H #define Form1_H #include "Form2.h" class Form1 : public Form { }; #endif ---------------------- #ifndef Form2_H #define Form2_H #include "Form1.h" //Form1.hからincludeされた場合はForm1_Hが定義済みなのでインクルードガードで無視される class Form2 : public Form { }; #endif こんな感じで書かれてればエラー出ないと思うんだが‥‥
- 821 名前:デフォルトの名無しさん [2007/08/29(水) 23:48:13 ]
- つか、C++を使ってなぜ.NETなのかさっぱり分からん
- 822 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 23:51:54 ]
- つか、C++を使ってるのか.NETなのかさっぱり分かってないんだろう
- 823 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 23:52:29 ]
- >>818
std::istringstreamとstd::getline(std::stringを引数にとるほう)はだめ?
- 824 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 23:56:08 ]
- >>818
意味がイマイチわからんかったが、 istringstream と >> じゃだめか?
- 825 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 23:58:58 ]
- >>823
あ そっちじゃなきゃだめだわ (大域のgetline か basic_istream<> の istream)
- 826 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 23:59:07 ]
- >>818
boost, boost-sandbox or pstade使ってもいいなら良い方法があるんだけどいいかな? by boost厨
- 827 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 23:59:32 ]
- basic_istream<> の istream ×
basic_istream<> の getline ○
- 828 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 00:04:46 ]
- 聞いてくれよ、おら
C++のunionにメソッドを置おけること、昨日知ったよ、orz これって常識?
- 829 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 00:12:39 ]
- >>828
structはよく見るけどね
- 830 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 00:12:40 ]
- unionを使うことが非常識
- 831 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 00:17:44 ]
- どちらかというと常識ではないと俺は思う。
自身で使ったことがないし、他人が使っているのを見たこともないし。
- 832 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 00:25:36 ]
- なんかクラスWidgetがあって、
Widget(); という文があったら、Widgetのオブジェクトを(デフォルトコンストラクタで)作成して、 次の行に逝く前にすぐ消される(デストラクタが呼ばれる)と思います。 んじゃ、こういう場合はどうだろうと思い、↓を書いてみました。 Widget *w = &Widget(); 「Widget() はこの行でデストラクタが呼ばれ消えてしまうので、ポインタwは無効になるだろう」と考え、 考え通り、すぐデストラクタが呼ばれました。 んじゃ、参照はどうだろうと・・・ Widget &w = Widget(); 自分の考えとは違ってすぐにデストラクタが呼ばれず、この関数(またはブロック)を抜けるところでデストラクタが呼ばれました。 参照だと何か特殊なんですかね・・・
- 833 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 00:29:15 ]
- 参照には null が無いから
- 834 名前:デフォルトの名無しさん [2007/08/30(木) 00:34:16 ]
- 大きなファイルサイズの読み込みを早めるためにMemoryMappedFile使う場合、
ファイル全てのアドレスを割り当てたらまずいですよね・・? やはりマッピングアドレスを動的に変化させる仕組みが必要でしょうか? そうすると編集時に問題になってしまいそうですが、何かセオリーみないなモノはあるのでしょうか?
- 835 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 00:39:33 ]
- >>832
const参照なら標準規格でも明文化された規定になっている。 (知っている人は少ないかもしれないが) けれど、非const参照の初期化に一時インスタンスの使用はできないことになっている。 一時インスタンスは右辺値だが、非const参照の初期化には左辺値が要求されるため。 最近のVC++やg++ではエラーになる。 どうせお前が使っているのはBorand C++だろう。窓から投げ捨てろ。
- 836 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 00:40:16 ]
- >>832
参照は一時オブジェクトを捕まえておける 関数の戻り値とかもおっけー
- 837 名前:836 mailto:sage [2007/08/30(木) 00:40:53 ]
- const参照だけだっけか。すまそ。
- 838 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 01:04:15 ]
- >>823,824
thx istringstreamでいってみます。
- 839 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 12:51:44 ]
- >815
別にForm1の定義がまるまる欲しいわけじゃないでそ。 Form *createForm2(); みたいな生成関数があれば大抵足りるんじゃないの。
- 840 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 13:45:38 ]
- >>820
ガードは試してみたんですが、「定義」が.hに書かれているので・・ >>839 まったくそのとおりなんですが VCを使うと、デフォルトでヘッダファイルに定義が書かれているんですよ なので、どうしたものだろうかと やっぱり、いちいち自分でヘッダファイルに書いてある定義をcppに持っていって、ヘッダファイルでの 宣言は改めて書くようにしないとダメなんでしょうか
- 841 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 15:06:39 ]
- >>835
BCCタンを悪く言うと痛い目にあうお(#^ω^)ビキビキ
- 842 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 15:56:48 ]
- >>835
警告は出るがな
- 843 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 16:09:45 ]
- >>840
form2.h では、#include "form1.h"のかわりに、 class Form1; と書いとけ。 これで、Form1* ほげほげって書けるようになる。 form1.h でも同様にする。 form1.cpp, form2.cpp では、両方のヘッダファイルをincludeする。
- 844 名前:デフォルトの名無しさん [2007/08/30(木) 21:06:59 ]
- BorlandC++5.5.1を使ってコンパイルしているのですが、
このコンパイルをプログラム側からSystem()関数で行った場合に、 プログラム側でコンパイルでエラーが出たかどうかを判断できないのでしょうか? 具体的には System(bcc32 helloworld.c); の返り値とかで判断できないものでしょうか?
- 845 名前:844 [2007/08/30(木) 21:07:40 ]
- すみません、C言語です。
- 846 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 21:30:34 ]
- 無理。
- 847 名前:844 [2007/08/30(木) 21:33:22 ]
- >>846
そうですか、意外とプログラム側から分かる情報は少ないんですね。。。 どうしようかな・・・
- 848 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 21:38:26 ]
- 諦めろ
お前には無理 お前のプログラム側から分かる情報なんて皆無
- 849 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 21:42:46 ]
- んあ?
コンパイルに失敗したかどうかは分かるんじゃない? エラーが出たのかどうかは分からんが。 BCCのsystem()は良く知らん。 gccのなら、↓でcommandの終了コード取れたと思うけど。 status = system("command"); if(WIFEXITED(status)) exit_code = WEXITSTATUS(status);
- 850 名前:844 [2007/08/30(木) 22:02:00 ]
- >>849
manpageを見る限りだと、<sys/types.h>と<sys/wait.h>の二つをインクルードするみたいなのですが、 これをコンパイルしたところ、sys/wait.hをオープンできないというエラーがでます。 何故でしょうか・・・;; ちなみにそのWEITSTATUSの返り値はint型でいいのでしょうか?
- 851 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 22:04:07 ]
- お前がアホだから
- 852 名前:デフォルトの名無しさん [2007/08/30(木) 22:06:34 ]
- 数千行から1万行程度で書けて、出来たとき達成感のあるような練習課題思いつけば教えてください
テトリスとかどうかなと思ってるんですが
- 853 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 22:33:30 ]
- 将棋でも作れば?
- 854 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 22:36:06 ]
- >>852
テトリス
- 855 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 22:48:33 ]
- >>850
いや、ちょっと待ち。 BCCはWindowsの話じゃないのか? gccはUNIXとかLinuxの話で。 WEXITSTATUSがBCCでも存在するか知らんのだが。
- 856 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 22:49:26 ]
- >>850
なぜなら、manpage は bcc じゃないから。 戻り値よりも、obj ファイルや exe ファイルが生成されてるかどうかを見た方が楽なんじゃないか。
- 857 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 22:51:43 ]
- >>852
テトリス
- 858 名前:844 mailto:sage [2007/08/31(金) 00:21:14 ]
- >>856
それだとコンパイルするたびに、objファイルを消さないといけないですよね。 コンパイル前にobjファイルとexeファイルを消すプログラムにすれば済む話かもしれないですけど・・・
- 859 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 00:25:28 ]
- >>852
2ch専用ブラウザ機能付きテトリス セルフコンパイル機能付きテトリス 英日翻訳機能付きテトリス OCR機能付きテトリス 人工無能機能付きテトリス
- 860 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 00:27:18 ]
- >>844
エスパーすると君が本当に必要なのは make および makefile に関する知識だ
- 861 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 00:31:02 ]
- 人工無能機能付きテトリスに期待
- 862 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 00:40:19 ]
- 今更過ぎる質問なんですがWindows2000にVC++2.0って
インストール不可なんでしょうか? うまく行ったかなと思ったら、最後の最後でレジストリの 書き込みに失敗しましたとかって出てしまいました。 他のバージョンのVCとかは一切インストールしていない 状態です。
- 863 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 00:42:02 ]
- 可能ですよ
- 864 名前:862 mailto:sage [2007/08/31(金) 00:53:42 ]
- >>863
レスありがとうございます。 Win2Kのインストールから、もう一度やり直してみます・・・orz サービスパック(SP4)入れる前にVCをインストールした方が 良かったのかな・・・?
- 865 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 01:05:29 ]
- #include <iostream>
//typedef int link; class link {}; int main(){ link l; } g++4.1.2で怒られました。コンパイラ不信になりそうです。 変数名をNULLにするような常識外れなのかもしれませんが、 こういう名前空間の衝突はどこを見れば予想できますか?
- 866 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 01:08:56 ]
- >>g++4.1.2で怒られました。コンパイラ不信になりそうです。
君のレベルではコンパイラのバグなど、コンパイラ側の問題に遭遇することは無い。 コンパイルエラーはすべてコンパイラのせいではなく、自分が悪いのだと認識したほうがいい。
- 867 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 01:13:28 ]
- >>865
エラーメッセージを見れば予想できるよ。
- 868 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 01:26:28 ]
- __declspec(novtable)は、どういう時に使うものですか?
- 869 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 01:30:10 ]
- >>865
自分の作ったクラスとか関数をすべて自分の名前空間に入れれば衝突を気にせずに済むよ
- 870 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 01:31:03 ]
- >>866
標準ヘッダをインクルードしたらグローバルにunistd.hがぶちまけられる、 ってのはバグでなくてもショックでした。 >>867 初お目見得のエラーメッセージって初心者キラーなもので…。 class hoge{ link l; }; : error: ‘link’ does not name a type 危なそうな名前は回避するしかないんですかね。気をつけます。
- 871 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 01:36:49 ]
- >>869
あなるほど、ちと面倒ですがそうします。皆さんありがとう。
- 872 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 04:29:23 ]
- 標準入出力等の一部の関数は、
名前空間というものが無いCの関数として公開されたAPIを用いて実装されてるわけで、 たとえ標準Cの関数だけをstd名前空間に入れてもそいつらが使ってるAPI関数はそのままグローバルに残り そりゃ凄い規模の汚染が発生していることだろう。 VCのIDE上でグローバル名前空間::からの入力予想をかけたらその凄まじさがよくわかる。 ただ大文字で始まるようなものは少ないんで、 「クラスの名前は先頭大文字でキャメル」とかそれなりに一般的な命名規則使ってれば遭遇しにくく 知らずに有効なコーディングルールを使ってるとかえって危ない場合ってあるんだなぁとかそういうことを思った。
- 873 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 09:46:13 ]
- 前々から気になっていたので、これを機にぐぐった
>>868 msdn.microsoft.com/msdnmag/issues/0300/c/
- 874 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 11:12:27 ]
- A を直接作ることが無いのであれば、
A のコンストラクタで仮想関数テーブルを初期化する処理は必要ない、無駄だ、ということか。なるほど。
- 875 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 11:28:51 ]
- setcurrentdirectoryを使って、
ネットワーク上のPCのディレクトリを指定したいのですが、 記述の仕方を教えてください。
- 876 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 11:30:36 ]
- novtableはATLのウィザードで作ったクラスで良く見る。
- 877 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 11:50:48 ]
- >>845
\\servername\sharename
- 878 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 12:04:14 ]
- 1万行だなんて身近スg
- 879 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 13:11:18 ]
- std::basic_ifstream<wchar_t>で文字を読み込むと日本語が文字化けしちゃうんですか
何故でしょうか?読み込むテキストはUTF-8で書いてあります
- 880 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 13:25:50 ]
- UTF-8なlocaleをstreamにimbue()汁
それがサポートされていれば、の話だがな
- 881 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 13:31:46 ]
- これimbue(std::locale("japanese"));やstd::locale::global(std::locale("japanese")); これは
試しましたがダメでした
- 882 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 13:36:17 ]
- > UTF-8なlocaleを
これが読めなかったのか janapeseとかいうlocaleを使っているところを見ると、VC++か? なら、C++localeに任せるのは諦めろ。 VC++はUTF-8なlocaleをサポートしていない。
- 883 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 13:38:14 ]
- そうですか・・・じゃあマルチバイトで読み込んで内部で変換するしかないですね
ありがとうございました
- 884 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 13:42:01 ]
- ようはコード変換のファセットだけUTF-8のものと差し替えればいいんだ。
BoostにもUTF-8コード変換のファセットがあるんだが、 対象がUCS-4だからWindowsのwchar_tでは使えないだろう。 それならおそらく自作するしかない。誰か作っているかもしれないが。 www.boost.org/libs/serialization/doc/codecvt.html
- 885 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 13:49:05 ]
- >>884
汎用的なcodecvt<>のセットがどっかにあるんなら俺も欲しいな boost::iostreams::codeconverterとかはpublicなデストラクタを備える codecvt<>実装を要求するんで、VC++標準のcodecvt<>は使えないしな iconvあたりを使ってデッチあげる手もあると思うが、状態をmbstate_tで 管理しなければならない辺りが悩ましげだし、wchar_tのバイト数が決まってないのも やっぱ面倒だよな
- 886 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 14:25:44 ]
- 使ったことないけど
ttp://tricklib.com/cxx/ex/babel/
- 887 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 15:04:43 ]
- CSimpleStringクラスのCopyChars()をそのまま使うと、「古い形式で使われています」と
警告がでるんですが、この関数の新しいバージョンってありますか? 探したけど見つかりませんでした
- 888 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 16:52:12 ]
- #define _SECURE_ATL
- 889 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 17:30:31 ]
- やっぱりないですよね
#pragma warning( disable : 4996 )で消しました
- 890 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 17:38:19 ]
- #if (_MSC_VER > 1310)
#pragma warning(push) #pragma warning(disabel:4996) #pragma warning(pop) #endif
- 891 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 23:16:38 ]
- template <class Ch,class Tr=std::char_traits<Ch> >
これって何してるのですか?
- 892 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 23:20:32 ]
- その気になれば、Trをstd::char_traits<Ch>でない何かにすることもできる、と
- 893 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 23:27:59 ]
- テンプレート引数のデフォルト値
- 894 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 23:32:10 ]
- template <class Ch,class Tr=std::char_traits<Ch> > class basic_string;
があるときに basic_string<char> ってするだけで basic_string<char, std::char_traits<char> > ってするのと一緒になるという手抜きができますよってこと?
- 895 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 23:59:19 ]
- そう
- 896 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 00:05:08 ]
- basic_ofstreamを拡張して
EUC出力したいのですけど何か参考になる URLとかないでしょうか?
- 897 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 00:13:15 ]
- http://
- 898 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 00:23:06 ]
- つ[www.google.co.jp/]
- 899 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 00:28:17 ]
- >>896
コード変換はストリームの管轄ではない。>>879-886 でも、basic_ostream<char>だとcodecvtは使われないのか? locale関係に挫折したら、邪道だけどストリームバッファを 作成して書き込み前の瀬戸際で変換をかけるという手もあると思う。
- 900 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 10:26:32 ]
- unsigned char --> charの変換だけが欲しいのに
なんでここまで大がかりになるのかよーわからん。 C++の言語設計ポリシーがきもいのが原因なんだろうけどさー
- 901 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 11:52:33 ]
- 【自己責任で】あっさり変換しちゃえ。
究極的にそれができるから、C/C++が好きだ 美しくスマートに書くのは確かにめんどいが
- 902 名前:!omikuji mailto:sage [2007/09/01(土) 12:47:39 ]
- t
- 903 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 14:51:04 ]
- 興味本位でModern買って、今日届いたけど難しいんだよな?
もっと勉強してから読むか
- 904 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 15:06:26 ]
- 第三章を読んで(いい意味で)爆笑するといいよ
- 905 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 16:33:13 ]
- ttp://www.scl.kyoto-u.ac.jp/scl/appli/appli_manual/SUNWspro/WS6U2/ja/manuals/stdlib/user_guide/loc_io/19_4.htm
に、JIS<->Unicodeのcodecvtファセット実装例が載っているんだが、 mbstate_tを使わない場合(この実装例では使ってない。つか、mbstate_tなんて 処理系毎の実装詳細に属する代物だから、事実上使えないだろう)、 結局独自のストリーム型を定義するハメになるようだな。 無論wcout等の既存のストリームをimbue()することなんて出来やしない。 これじゃわざわざcodecvtとしてコード変換層を実装する意味はありはしない。 無駄とも思える複雑さを導入していながらこのていたらく。 C++のlocale, streamまわりの設計は本当に糞だな(実装の質も糞だが)。
- 906 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 18:38:25 ]
- クラスのメンバにfstreamを持たせるのってよくない?
コピーコンストラクタをちゃんと書いてないとコピーできないよね。 なんかもっといい方法ってあるんだろうか。。
- 907 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 22:00:09 ]
- fstream を局所的に使う設計に変更するとか
- 908 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 22:58:17 ]
- refcount付きのfstream*入りクラスつくってメンバにいれるとか
- 909 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 22:59:49 ]
- unicode_iteratorの最強さは異常
組み込みでも使えるな
- 910 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 01:52:58 ]
- memcpy.asmというファイルでエラーが出て困っています
これはどういう時に呼び出される命令なんでしょうか?
- 911 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 01:56:59 ]
- >>910 memcpy() したときだろ。
- 912 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 02:08:48 ]
- memcpy使ってないときにも落ちちゃうんですが
別の関数とかクラスが内部で使ってる場合もあるんですかね?
- 913 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 02:13:57 ]
- ああ
- 914 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 02:14:39 ]
- >912
そりゃ、メモリコピーなんて非常に基本的な機能だからいろんなところで使われてるだろう。
- 915 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 02:15:58 ]
- てかダメだろう落としてちゃ。もうプログラムングやめた方がいいんじゃねぇの
- 916 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 02:17:41 ]
- じゃあ原因の特定はむずかしいですね
どうしよう
- 917 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 02:18:06 ]
- デバッガでコールスタック見ればいいんじゃない
- 918 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 02:30:05 ]
- >>917
今やってみたら原因がわかった気がします ありがとうございました
- 919 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 04:18:43 ]
- 基本的な質問ですみません
VC++6でwindows コンソールアプリを作っていますが たとえば int nA; nA = 0; while(1){ print("count=%d",nA++); Sleep(500); } でカウンタ値を表示しますが マウスをコンソールにあわせると、タイトルバーに「選択」とでて処理が止まってしまいます これをやめさせるにはどーしたらよいでしょう?
- 920 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 04:28:44 ]
- >>919
コンソールウィンドウの「簡易編集モード」をオフにするとか。 あれ?マウスカーソル持って行っただけで選択になったっけ?
- 921 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 04:30:26 ]
- VCで/clrを付けると、GC(gcnew)が使えるようですが、これは.NETと関係あるんですか?
- 922 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 04:48:44 ]
- >>920
マウスを持っていって置くだけでなります
- 923 名前:919 mailto:sage [2007/09/02(日) 04:54:02 ]
- >>920
ありがとうございます 「簡易編集モード」でぐぐったら、プロパティで変えられるんですね 変えたらならなくなりましたが このウィンドウだけ、プログラム上から変える方法はあるんでしょうか?
- 924 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 05:16:22 ]
- >>923
さぁね。あとはこっち↓行けば? Win32API質問箱 Build56 pc11.2ch.net/test/read.cgi/tech/1186989201/
- 925 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 07:33:16 ]
- レジストリ書き換えれば(ry
- 926 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 07:58:40 ]
- >>921
コンパイラは基本的に.NETの中間言語 (CIL)を吐き(一部生の機械語もあり)、 実行には.NET Frameworkなどが必要になる。 所定の構文に従って書けば、C#など.NET言語で使えるクラスも書けるし、 参照設定すれば.NETのライブラリだって使えるしで、 お得なようで、ネイティブと.NET両方の苦悩を抱え込んで面倒くささも倍増。 それが/clrオプションで使えるC++/CLI。 C++/CLI について語ろうぜ Part2 pc11.2ch.net/test/read.cgi/tech/1142147319/l50
- 927 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 10:47:36 ]
- >>922
「置く」なんてオレ語を使うからややこしくなる。 クリックしているんじゃないの? クリックすることを「置く」なんて言っても通じないよ。
- 928 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 10:57:46 ]
- クリックのことを押すと言うのはよくやる。
- 929 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 11:00:04 ]
- 押すじゃなくて置く
- 930 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 11:06:05 ]
- 持っていく→アクティブ/非アクティブ関係なく窓の上
置く→アクティブで窓の上 で、アクティブにするのにクリックしたんだと思ったが違うのか
- 931 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 11:15:04 ]
- よし引っ張れ!
それだ
- 932 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 11:17:56 ]
- クリックしたんじゃねぇか
- 933 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 11:34:08 ]
- ダブルクリック→つっつく
- 934 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 12:42:48 ]
- ドラッグ→ひっぱる
- 935 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 12:46:11 ]
- 最小化→消す
- 936 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 12:47:15 ]
- プー吹いた
- 937 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 19:08:55 ]
- CかC++にはinterfaceっていう予約語があるんですか?DirectX関係のソースに使われてました。
大文字でもなくマクロではないと思うし、処理系の拡張なら__interfaceという感じになってそうですし、 VC++だと色が変わるので、予約語だと思ったんですが。 でもWikipediaとかの予約語一覧にも載ってない…
- 938 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 19:17:37 ]
- C#じゃね?
- 939 名前:デフォルトの名無しさん [2007/09/02(日) 19:20:41 ]
- ねーよ
- 940 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 19:23:32 ]
- virtual
- 941 名前:デフォルトの名無しさん [2007/09/02(日) 19:25:45 ]
- struct
- 942 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 19:27:14 ]
- import
- 943 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 19:28:41 ]
- extern
- 944 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 19:29:39 ]
- null
- 945 名前:デフォルトの名無しさん [2007/09/02(日) 19:30:43 ]
- po
- 946 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 19:39:52 ]
- inter
- 947 名前:デフォルトの名無しさん [2007/09/02(日) 19:41:16 ]
- >>941
"interface" という語は C++ の予約語ではなく、 該当する COM ヘッダーの中で "struct" として #defined されます (C++ では、構造体が標準でプライベートではなくパブリックの継承とアクセスを使用することを除けば、クラスと構造体は同じであることを思い出してください)。 msdn.microsoft.com/library/ja/jpdnguion/htm/msdn_drguion020298.asp
- 948 名前:デフォルトの名無しさん mailto:947 [2007/09/02(日) 19:43:53 ]
- >>937←>>947
- 949 名前:デフォルトの名無しさん [2007/09/02(日) 19:52:22 ]
- 陸上では日本人では全く勝負にならんが、コンピュータでもそうなんですかね?
Code Projectなんかがヘビーなコンポーネントを公開しているのはほとんど海外組み
- 950 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 20:30:52 ]
- ICFPの上位にgoogleのチームに混じって日本人が入っていたりするよ
- 951 名前:デフォルトの名無しさん [2007/09/02(日) 21:52:22 ]
- すみません
C言語でtelnetした後に続けてサーバーに出力を自動で送信する方法はありませんか? エミュレータと通信してましてエミュレータと接続した後に エミュレータ上のモニターに対してコマンドを送りたいです 具体的には system("telnet 127.0.0.1 5556"); した後にqというコマンドをエミュレータのモニターに送りたいのですが スレッドが一つだと処理がtelnetから動かず スレッドを二つにして system("q"); と入力を行うとエミュレータでなくDOS上でqが行われるようでうまく動きません
- 952 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 21:58:19 ]
- >>951
っ popen
- 953 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 21:58:30 ]
- OSを書け
- 954 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 22:01:30 ]
- >>951
そういう場合はexpectを使え、ということになっている
- 955 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 22:12:00 ]
- 一瞬>>953が煽りに見えたが、そうだ、ターゲットOSを書け
- 956 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 22:12:29 ]
- みんな詳しいな
おれなんて文法理解するだけで精一杯だよ
- 957 名前:デフォルトの名無しさん [2007/09/02(日) 22:15:50 ]
- やりたい事があったら文法なんて関係ないさ。
- 958 名前:デフォルトの名無しさん [2007/09/02(日) 22:16:34 ]
- 説明不足すみませんでした
OSはWinXP エミュレータはQEMU エミュレータ上のOSはDebian Cの開発環境はVisualStdioを使っています そしてWinXP上のC言語とQEMUで通信しております
- 959 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 22:17:24 ]
- >>956
・簡単なアプリを作る→その肉付けをしていき内容を濃くする ・簡単なアプリを作る→簡単なアプリを作る ・高度なアプリを作る→半年後見直すと自分で組んだプログラムが恥ずかしく感じ組みなおす ・高度なアプリを作る→挫折する これらを繰り返していくうちに身に付くから、今できることをやるだけで色んな知識を覚えていくよ
- 960 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 22:36:39 ]
- >>957
>>959 もともと発想力がないからか、自分で課題が思い浮かばないけど とりあえず持ってる参考書は全て読んで、サンプルだけでも動かして ちょこっと変更したりすることをしばらく続けて見ようと思う いまはイテレーターアダプタと格闘中。
- 961 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 22:43:14 ]
- >>951 >>958
多分勘違いしてはる system()はコマンドを実行するようなモノであって、 線路(パイプ、FILE*など含む)に送信する働きはない 試作では、send(),recv()かなんかを使うことになるのでは そっからはやり方はいろいろあるけど、自力で見出していくのでは
- 962 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 22:46:05 ]
- >>951
例えばTeraTermを使っていいなら、自動運転用マクロ言語内蔵だから接続先からの特定のキーワードを待って それに対して一定の反応を返すことくらいちょちょいのぱーだよ。
- 963 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 23:05:08 ]
- >>951
ソケット開いてtelnet話せばいいだけだろ なんでそんな単純な事も解からないんだ 氏ねよw
- 964 名前:デフォルトの名無しさん [2007/09/02(日) 23:08:25 ]
- >>960
サンプルだけ動かして 「俺、C++できるよ」 なんて言ってるような奴にはならないでね
- 965 名前:デフォルトの名無しさん [2007/09/02(日) 23:10:29 ]
- >961
system関数は使えないんですね・・・ recv()考えて見ます >962 それはちょっと使えそうにないので他の手を考えてみます
- 966 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 23:11:21 ]
- >>964
まだ初期段階だから先は長いと思ってる まあ仕事でC++使えば一気に向上するとは思うけど
- 967 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 23:12:27 ]
- >>965
詳細はよくわからんが、connectしてデータをsendすればいいだけではないの??
- 968 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 23:26:00 ]
- telnet特有のネゴシエーションとか、ログイン処理とか
URGデータの処理とか考えなけりゃね。
- 969 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 23:28:07 ]
- >>968
そうかログイン処理が必要だな こりゃ失礼
- 970 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 23:34:45 ]
- 今時telnetってとこには突っ込まんが
せめてライブラリ使うかexpectに汁っての 下らない仕事のためにtelnetを喋るTCPクライアントをわざわざ手書きするなんて ナンセンス極まりない
- 971 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 23:46:27 ]
- 思うに、telnetで接続して、"q\n"かなんか、何か簡単にシグナルしたかったんだろう
そのくらいの軽務なら、connect(), recv()でいいんじゃないかと思った CreateThreadはできるけど、system()がわからない。 きっと、IPC(広義の)の初心者さんなんだ ヒントくらいでいいんじゃまいかとw
- 972 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 23:54:37 ]
- telnetぐらい3日でかけるだろ
どうせ暇なニート学生だろ?
- 973 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 23:59:55 ]
- ニート学生って言語矛盾じゃないか
- 974 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 00:01:34 ]
- どうせ学校もろくにいかないで
2chが動画サイトめぐりだろ 身分があるだけでニートとかわらんだろw
- 975 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 00:08:38 ]
- 何がしたいのかは知らないが、
そもそも telnet を使う必要が無いんじゃないか?
- 976 名前:デフォルトの名無しさん [2007/09/03(月) 00:10:10 ]
- Cの基本的な文法については勉強して次は実際にSourceForgeでオープンソースの
プログラムを読もうと思っていたのですが難しすぎて分かりません みなさんはある程度文法の勉強をしてからどのようにして勉強していきましたか?
- 977 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 00:13:36 ]
- 作りたいものを作る。それが一番。
- 978 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 00:15:51 ]
- >>976
Cなら簡単に1万行ぐらいまでなら 読めるようになる方法がある。読めない文法だけ 飛ばしてたぶん処理追えるようにはなるとは思う 環境ちょっと限定になるけどな
- 979 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 00:16:17 ]
- >>976
必要に迫られれば、驚くほどの速度で習得可能 文法の次はアルゴリズムの勉強がお勧め アルゴリズムに関する説明(自然言語)を元にC言語ソースにする これが結構難しい
- 980 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 00:18:20 ]
- 読むのと書くのは別の能力。
- 981 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 00:20:37 ]
- 書くスキルあげつつ読みたいなら
モジュールバラしテクニックを身に着けるといいよ。 単純にどこで処理が範囲かわかったら あとは改造する楽しいよ。
- 982 名前:デフォルトの名無しさん [2007/09/03(月) 00:25:40 ]
- 読むと書くのは別の能力だというのは分かりますが
ある程度うまい書き方とか定石なども学びたいと思いまして 今コーディングの本を読んでいるのですがいきなり書いてそれに慣れてしまうと ものすごい危険なコードを何の意識もなく書いてしまったりしてしまうのかと思いまして >>979 今読んでいる本が終わったらアルゴリズムの本も読んでみようと思います
- 983 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 00:30:13 ]
- >>982
最初から完璧なコードが書けるなどと思うな 最初は誰でもつたないんだ それを気にせずコード書け 書かなきゃいつまでたっても上手くはならん
- 984 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 00:33:16 ]
- C++だったらそれこそ20冊ぐらい読まないと駄目だからなぁ…
と言っても読みながら書かないと理解できないような内容だから 読もうとしてる内に書く経験も積むことになるが
- 985 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 00:34:26 ]
- 20冊って何の本だよ
- 986 名前:デフォルトの名無しさん [2007/09/03(月) 00:35:03 ]
- >>983
今は本を読んで演習問題などでコードを書いているという状況です >>984 何かお勧めの本などはありませんか?
- 987 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 00:38:12 ]
- 文法覚えたなら簡単なソフト作ればいいんじゃね?
何でもいいから動くもの作らんと、モチベーション維持が大変だ 目標があってC言語勉強したんだろうから、目標までの道のりを 考えて一歩ずつ進むしかないよ。 といいつつも、俺はなんもしてないな。
- 988 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 00:41:22 ]
- 手じかに役に立つ類のちょろっとしたものを書きたいのなら
ぶっちゃけCは向いてないよあまり
- 989 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 00:42:45 ]
- 演習問題を一通りやって何かを作ろうとしてもアイディアが出なければ
大学とか専門学校で出される課題のようなプログラムを作るといいよ ここには宿題スレもある事だし
- 990 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 00:44:16 ]
- ライブラリとかマクロとか使ってカスタムすればLL言語並の「軽い」C++ができるぜ
ただし作った奴以外には読めない使えない代物になるけど
- 991 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 00:46:46 ]
- >>986
人に薦められた本が君に適している確率はかなり低いよ。 マスターしたけりゃ立ち読みして読みやすいと感じた本を読め。 仮にその本が結局ハズレでも、その次に選ぶ本はより君に適しているはず。
- 992 名前:デフォルトの名無しさん [2007/09/03(月) 00:52:56 ]
- >>987
どうやれば市販のソフトのようなものが作れるかもよく分からない状況で みなさんvisual studioとか使ってるんですか? >>991 はいわかりました
- 993 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 00:55:13 ]
- VisualStudio使ってるよ
VC++とVC#だけだけど
- 994 名前:デフォルトの名無しさん [2007/09/03(月) 00:58:05 ]
-
>>993 どのようなアプリをつくったんですか? 公開できるようなものではないと思いますがw
- 995 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 01:00:37 ]
- 次スレ
【初心者歓迎】C/C++室 Ver.42【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1188748806/l50
- 996 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 01:02:26 ]
- うめるか
- 997 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 01:03:47 ]
- >>994
馬鹿にしてんのか
- 998 名前:992 [2007/09/03(月) 01:07:49 ]
- >>997
994は僕じゃないです
- 999 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 01:13:49 ]
- うm
- 1000 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 01:14:10 ]
- 仕事で作った物って公開できないのが大半だな・・・
- 1001 名前:1001 [Over 1000 Thread]
- このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
|

|