- 1 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 21:21:26.11 ]
- エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.76【環境依存OK hibari.2ch.net/test/read.cgi/tech/1312621728/ ◆ソースのインデントについて 半角空白やTABでのインデントはスレに貼ると無くなります。 そのため、アップローダーに上げるのも手ですが直接貼る場合は、 全角空白か に置換すると見栄えだけはよくなります。 【アップローダー】(質問が長い時はココ使うと便利) codepad.org/ (コンパイルもできるし出力結果も得られる[]privateをチェック) ideone.com/ (時間帯によってはcodepadが重い事があるのでここも利用)
- 545 名前:デフォルトの名無しさん mailto:sage [2012/01/24(火) 12:34:49.47 ]
- void time(void)
{ #define CTMAX 200 static int ct = 0; // 0 <= ct <= 199 ct %= CTMAX; mod_10 = ct % 10; mod_100 = ct % 100; mod_200 = ct % 200; mod_500 = ct % 500; if(!mod_500) func500ms(); if(!mod_200) func200ms(); if(!mod_100) func100ms(); if(!mod_10) func10ms(); ct++; }
- 546 名前:デフォルトの名無しさん mailto:sage [2012/01/24(火) 13:52:36.91 ]
- 素直に書いた方がoptimize有利なんだから
ct = (ct + 1) % CT_MAX;
- 547 名前:デフォルトの名無しさん mailto:sage [2012/01/24(火) 14:01:39.16 ]
- time()を初めて実行した時に困るでしょ。
ct = 1;で実行することになって起動後9ms, 19ms, 29ms, ... で実行することになるよ。 人が書いたコードにbug入れる奴っているんだよな 迷惑なんだよな
- 548 名前:デフォルトの名無しさん mailto:sage [2012/01/24(火) 14:06:09.81 ]
- そもそも標準関数と同じ名前の関数を作るな間抜け。
- 549 名前:デフォルトの名無しさん mailto:sage [2012/01/24(火) 14:10:55.35 ]
- これって組み込みだから問題ないと思って特に指摘しなかったよ。
time.hなんて高尚なヘッダは存在しないんじゃないの?
- 550 名前:538 mailto:sage [2012/01/24(火) 16:33:33.09 ]
- >>539
ありがとうございます。助かりました。
- 551 名前:デフォルトの名無しさん mailto:sage [2012/01/25(水) 07:51:50.37 ]
- 結局>>542はどうなった?
自分は解決したから後はシーラないってか?
- 552 名前:デフォルトの名無しさん mailto:sage [2012/01/25(水) 09:36:12.44 ]
- >>544
さんのいうとおり++ct >= CTMAXとしただけでとりあえず 自分の作ったやつでも正常に動くっぽいですね。 ちなみに関数名にtimeなんて使ってません。書き込むとき 面倒なんで簡単な名前に変更しただけです。 >>545 のプログラムはわかりやすいですが、0のとき全部実行され てしまうのが難ですね。 それからmod_10で考えると10回に1回しか起動しないので、 それだと10msじゃなくて50ms周期になってしまいます。
- 553 名前:デフォルトの名無しさん mailto:sage [2012/01/25(水) 09:43:21.64 ]
- >>552
> ちなみに関数名にtimeなんて使ってません。書き込むとき > 面倒なんで簡単な名前に変更しただけです。 それにしても標準関数と名前がかぶるってねーだろ
- 554 名前:デフォルトの名無しさん mailto:sage [2012/01/25(水) 09:51:57.71 ]
- まぁ549さんの言うとおり、組み込みなんでtime.hなんて
使いませんし。
- 555 名前:デフォルトの名無しさん mailto:sage [2012/01/25(水) 10:14:03.52 ]
- >>552
bug指摘されちゃった。 static int ct = 0; if(ct == 0){ ct = 1; return; } 投稿した後に、これでうまくいくって気づいてはいたんだけどね。。。 この後はctが0になることはなくて、 0と等価な200がctの値としてくるから問題ないよね。 これくらい思いついてよ。。。 > それからmod_10で考えると10回に1回しか起動しないので、 > それだと10msじゃなくて50ms周期になってしまいます。 こっちは気づかなかった。きちんとdebugしてうまい具合にしてよ。
- 556 名前:デフォルトの名無しさん mailto:sage [2012/01/25(水) 10:19:00.51 ]
- 実際に問題になるかどうかじゃなくて、そういう紛らわしいことはするなってこった。
- 557 名前:デフォルトの名無しさん mailto:sage [2012/01/25(水) 10:24:21.70 ]
- ct += 5とするか、
time()を1ms毎に実行するようにするかして修正すれば良さそうだね。 後は任せた。 void time(void) { #define CTMAX 200 #define POLLING 5 static int ct = 0; if(ct == 0){ ct = POLLING; return; } // 0 <= ct <= 199 ct %= CTMAX; mod_10 = ct % 10; mod_100 = ct % 100; mod_200 = ct % 200; mod_500 = ct % 500; if(!mod_500) func500ms(); if(!mod_200) func200ms(); if(!mod_100) func100ms(); if(!mod_10) func10ms(); ct += POLLING; }
- 558 名前:549 mailto:sage [2012/01/25(水) 10:29:57.73 ]
- 自分で実装する時はtime.hがないからっていって、
time()やらtime.hに含む関数名を使ったりしないよ。 本当は、time()なんて関数を自作するのはまずいし、 他人に披露する時に借りの名前とするのも、 あらぬ誤解を招きかねないのでまずいんだけど、 でも、2chに書き込まれるような関数名に意見するのも面倒だし、 組み込みで使っている関数だって事は一見して明らかだったので、 time.hを使うことはまずないだろうって事であえて指摘しなかったんです。 まあ、本当は>>549がおかしいんだよ。 一々指摘するのも嫌だから指摘しなかっただけでさ。 私が名付けるとすれば、polling()かなぁ
- 559 名前:549 mailto:sage [2012/01/25(水) 10:31:25.79 ]
- >>558の
まあ、本当は>>549がおかしいんだよ。 は間違いで、 まあ、本当は>>542がおかしいんだよ。 が正しい。
- 560 名前:デフォルトの名無しさん mailto:sage [2012/01/25(水) 10:47:03.80 ]
- >>542
コードを書く前にまずは何をしたいのかを正しい日本語で人に説明する訓練をしなさい
- 561 名前:デフォルトの名無しさん mailto:sage [2012/01/26(木) 21:39:52.68 ]
- てすと
- 562 名前:デフォルトの名無しさん mailto:sage [2012/01/27(金) 13:12:52.00 ]
- class Hogeを事前に宣言しておいて、
あとから定義したいと思うのですが、うまくできません。 何か解決方法はありますか? // 宣言 class Hoge; Hoge func( ); int main( ) { Hoge h = func( ); return 0; } // 定義 class Hoge { public: }; Hoge func( ){ return Hoge(); }
- 563 名前:デフォルトの名無しさん mailto:sage [2012/01/27(金) 13:19:17.13 ]
- //hoge.h///////////////
// 宣言 class Hoge; Hoge func( ); /////////////////////// //hoge.cpp///////////// #include "hoge.h" int main( ) { Hoge h = func( ); return 0; } // hoge定義 class Hoge { public: }; Hoge func( ){ return Hoge(); } ///////////////////////////// ってことなら無理 Hoge h = func( );この時点でHogeの定義が見えてないとダメ int main()の前に hoge定義を持ってこないと
- 564 名前:デフォルトの名無しさん mailto:sage [2012/01/27(金) 13:21:27.99 ]
- func()がHogeではなくHoge*(またはスマートポインタ)を返すようにすれば大丈夫なはずだが、
設計を見直したほうがいいような気がする。
- 565 名前:デフォルトの名無しさん mailto:sage [2012/01/28(土) 00:37:44.02 ]
- std::map<boost::shared_ptr<Hoge>, value_t>から要素を生ポインタで検索したいという状況に陥ったのだけど、何かいい手はないですか?
とりあえず動くコードとして、 mapの要素を巡回してshared_ptr<Hoge>::getの返り値と検索キーを比較 一致していたらそのイテレーターの指す要素をmから削除 としているのですが、これではO(N)になってしまいmapの利点を生かせません
- 566 名前:デフォルトの名無しさん mailto:sage [2012/01/28(土) 00:44:01.91 ]
- 生ポインタをキーにする。
- 567 名前:デフォルトの名無しさん mailto:sage [2012/01/28(土) 01:03:22.81 ]
- スマポをキーにしようという発想が理解できない
- 568 名前:デフォルトの名無しさん mailto:sage [2012/01/28(土) 01:44:20.83 ]
- 検索キーになるポインタをshared_ptrに放り込む。
カスタムデリータに何もしない関数を指定してdeleteを防ぐ。 でも危険度は生ポインタをキーにするのとかわらないな。
- 569 名前:デフォルトの名無しさん mailto:sage [2012/01/28(土) 09:47:26.46 ]
- >>568
それって別ポインタとみなされて比較うまくいかないと思うけど
- 570 名前:デフォルトの名無しさん mailto:sage [2012/01/28(土) 14:08:13.74 ]
- コードが長くなってきたので、クラスの宣言と定義を、hとcppに分けたいのですが
下記のような場合、どう分ければいいでしょうか? class Hoge { private: const int m_x; public: Hoge(int x = 3) throw() : m_x(x) { //do something 1 } void func(int a = 5) { //do something 2 } };
- 571 名前:デフォルトの名無しさん mailto:sage [2012/01/28(土) 14:31:36.35 ]
- // Hoge.h
struct Hoge { Hoge(int x = 3); void func(int a = 5); private: const int m_x ; }; //Hoge.cpp #include "Hoge.h" Hoge(int x) : m_x(x) { do_something_1(); } void Hoge::func(int a) { do_something_2(); }
- 572 名前:デフォルトの名無しさん mailto:sage [2012/01/28(土) 14:46:52.59 ]
- >>571
ありがとうございます 理解できました
- 573 名前:デフォルトの名無しさん mailto:sage [2012/01/29(日) 16:27:31.12 ]
- Cを独学で学んでいる入門者です
コンパイル→実行について教えてください PCは富士通のノートパソコンで OSはvista home premium エディタはemacs コンパイラはMinGW です ソースファイルをコンパイルして実行する際、 M-x compile だと上手くいかないので、 M-x shell から >gcc -std=c99 ファイル.c でコンパイルしています ただ、毎回gcc -std=c99を書き込むのは煩わしいし、複数のソースファイルをコンパイルして実行する方法がわかりません。 Emacsで複数のソースファイルをC99で?コンパイルして、実行する効率的なやり方が知りたいです
- 574 名前:デフォルトの名無しさん mailto:sage [2012/01/29(日) 16:40:29.72 ]
- IDE(統合開発環境) vs emacs(テキストエディタ)
kohada.2ch.net/test/read.cgi/prog/1244310984/
- 575 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 07:41:57.55 ]
- >>573
make もしくはbatかシェルスクリプト
- 576 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 07:46:48.53 ]
- ふつうmakeだろ
- 577 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 08:57:23.22 ]
- GetOpenFileName/GetSaveFileNameで
lpstrFileに確保するバッファの大きさを決めるにあたって あらかじめ受け取るファイル名の長さを取得できないでしょうか。 長さが足りない場合再起不能だし、かといって使われないのに数キロも確保したくないし それでも足りない場合だってあるだろうし。 GetWindowTextに対するGetWindowTextLengthのような 関数があればよいのですが、この場合ユーザーからの入力なので どうしたものやら。
- 578 名前:573 mailto:sage [2012/01/30(月) 09:04:33.22 ]
- ありがとうございます。
Makeの使い方を調べてみます。
- 579 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 10:32:00.09 ]
- >>577
MAX_PATH分確保しとけばいいだろ
- 580 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 10:36:18.61 ]
- 大きなバッファを用意しても、260文字以上は格納されないんですか?
- 581 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 11:04:06.02 ]
- WinAPIならファイル名読むタイプのAPIは大抵バッファに読み込んだ文字数返るから
その文字数とバッファ長比べてバッファが足りてないと判断したら失敗とみなしてバッファを伸ばしてリトライすればいいよ
- 582 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 11:12:39.59 ]
- つーか、そもそもCommonDialogで256文字以上返せるのか?
そうでないなら260どころか、257で充分だ。
- 583 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 11:22:41.08 ]
- ttp://msdn.microsoft.com/en-us/library/ms646839(VS.85).aspx
- 584 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 21:01:42.03 ]
- 仮想関数の戻り値が、継承先の型でもOK、っていうルールの名前を何ていったっけ?
- 585 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 21:11:23.37 ]
- 共変性かな
- 586 名前:584 mailto:sage [2012/01/31(火) 07:55:25.34 ]
- >>585
それだ!ありがとー!
- 587 名前:577 mailto:sage [2012/01/31(火) 16:47:56.33 ]
- おお、ディレクトリ含めて260文字とかいれたら、無効ですって言われた・・・
ってことは、260文字以上入れたかったら、自分でダイアログ作れってことか・・・
- 588 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 17:03:36.11 ]
- 32ビットWindowsなんだけど
アクセスして良いポインタかどうかを判定しようとしていて ぬるぽ 0 初期化されてない有効なヒープ 0xcdcdcdcd 解放されたヒープ 0xfeeefeee この他に、一見してアクセスできなそうなポインタって何かあるかな。
- 589 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 17:06:29.89 ]
- そんなんで判断するなよ
- 590 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 17:07:41.88 ]
- 0xdeafbeef
0xdeaddead 0xbeaffeed
- 591 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 18:05:29.85 ]
- 自分で確保してない領域にアクセスすんな。
- 592 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 19:51:41.31 ]
- 外部から渡される未知のポインタなんよ
- 593 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 20:47:10.19 ]
- なにそれ怖い
- 594 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 20:50:48.03 ]
- 悪魔召喚ポインタ
- 595 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 21:17:34.81 ]
- 絶対に逆参照してはいけな
- 596 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 21:23:31.08 ]
- 書き込んだ名前の人間は必ず死ぬという死神のポインタ
- 597 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 21:26:01.82 ]
- C系列って恐ろしい言語だったんだな
- 598 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 21:29:14.36 ]
- しょうもないネタには食いついてやがんの
|

|