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
331 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 10:26:15 ] マクロに放り込むんだり引数の評価順に左右されるような場合はマズいけど 別にこのケースは何の問題も無いわな スタイルとして自分がそう心がけているというだけの話なら ご立派ですねで終わりだが 実にどうでもいい
332 名前:292 mailto:sage [2007/08/15(水) 10:26:21 ] 適切な日本語ではなかったけど、脳の衰え始めている先輩方には難しかったかな? むしろ適切であったとしてもまともにこたえる気はなさそうにおもえる
333 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 10:27:23 ] 2chで煽るのだけが生き甲斐の厨房に 煽り返す厨房か
334 名前:309 mailto:sage [2007/08/15(水) 10:44:58 ] >>331 今は問題無いからいいって考えはどうかと思うぞ。後々の仕様変更に耐えられるコードを書く方がいい。 もっとも今回は副作用で問題が出るマクロにするのが一番悪いが。 >>332 >まともにこたえる気はなさそうにおもえる 何でそう思ったか知らんが結局質問は「副作用があるコードを関数呼び出しで書いちゃ遺憾って言ってるけど、それって*++pではない場合にもいえなくない?」って事か?
335 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 10:49:04 ] >>331 話題がループするが、sub()がマクロなら問題だからするべきではないという話だろ。 件のサイトではsub()が何か提示されていないのだから、問題がないとは言えない。
336 名前:292 mailto:sage [2007/08/15(水) 10:54:44 ] 皆さんの話がかみ合ってないかもしれないので整理しましょう *++pってなんですか?
337 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 11:00:13 ] >>335 マクロにsub()なんて名前をつけてるのならそっちのが問題じゃね マクロは大文字で目立たせるのが基本だし subはサブルーチンのサブだろう ま、標準ライブラリの一部の関数はマクロで実装することも許されているけどな
338 名前:デフォルトの名無しさん [2007/08/15(水) 11:13:27 ] >>336 死ね
339 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 11:32:32 ] すみません、教えてください。 C++でコンテナからイテレータを取り出すときに、iterator とconst_iterator とを 区別するのはどうやっているんでしょうか? std::vector<>::iterator begin(); と std::vector<>::const_iterator begin() cons; のように、同じ関数でiterator を返したりconst_iterator を返したりしたいんですが、上手くいかない……
340 名前:339 mailto:sage [2007/08/15(水) 11:40:56 ] ごめん、忘れてください。超間抜けなこと聞いた。 暑くて頭がボケてたみたい……
341 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 11:42:17 ] while(1) sub( *++p ); で意味をなす単項subってどんなマクロ(関数)なんだろ
342 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 11:46:15 ] >>337 <*grep*>:319:crt/src/minmax.h:21:#define max(a,b) (((a) > (b)) ? (a) : (b)) <*grep*>:333:crt/src/stdlib.h:166:#define __max(a,b) (((a) > (b)) ? (a) : (b)) <*grep*>:340:crt/src/stdlib.h:472:#define max(a,b) (((a) > (b)) ? (a) : (b)) <*grep*>:342:crt/src/v2tov3.h:71:#define max(a,b) (((a) > (b)) ? (a) : (b)) <*grep*>:387:include/minmax.h:21:#define max(a,b) (((a) > (b)) ? (a) : (b)) <*grep*>:399:include/stdlib.h:146:#define __max(a,b) (((a) > (b)) ? (a) : (b)) <*grep*>:406:include/stdlib.h:424:#define max(a,b) (((a) > (b)) ? (a) : (b)) <*grep*>:603:PlatformSDK/Include/WinDef.h:177:#define max(a,b) (((a) > (b)) ? (a) : (b)) なるほど、標準ライブラリにないmax()系がこんなにあるとはM$は問題だらけだね。
343 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 11:48:41 ] >>341 きっとこんなのだよ。 #define sub(x) putchar(x)
344 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 12:04:17 ] >>342 そうだな。実際最悪だろ。
345 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 12:06:28 ] マクロは名前空間にもくるめないしなあ
346 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 12:08:02 ] >>342 実際、それが問題になることがあって、 min,maxを定義しないようにするための NOMINMAX というマクロが存在する
347 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 12:08:48 ] >>342 実際そのマクロの存在の為に、VC6の<algorithm>にはstd::max, std::minがない。 これはC++の移植性において、由々しき問題である。
348 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 12:10:11 ] まあVC6はそれ以前に色々ダメすぎだけどな 今となっては
349 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 12:10:29 ] >>342 Effective C++でも第1項でいきなり問題視してるじゃん。
350 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 12:41:16 ] Effective C++(笑)
351 名前:デフォルトの名無しさん [2007/08/15(水) 12:50:00 ] 質問です。 Windows Vista買ったら、Borland C++5.01のダイアログエデイタが正常に動作しません。 Xpマシンもありますがどうすればいいでしょうか? 1.プログラムはXpマシンで作成してコピーする。 2.ダイアログの部分だけXpマシンで作成してコピーする。 3.Vistaで動作する開発環境を買って移植する。
352 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 12:57:03 ] マルチ死ね
353 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 14:18:31 ] >>349 ttp://kamaitachi.blogdns.net/cgi-bin/izna/manage/img0351.jpg これか。別にそんなに問題視はしてないように見えるが。
354 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 14:21:04 ] 問題視しまくりじゃないか。
355 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 14:47:21 ] ここで言う「マクロと関数に名前の区別」というような点は問題視してない
356 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 14:56:09 ] 確かに>337が指摘しているような「大文字ではない」ことについてはなんら言及されていないね。
357 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 15:01:51 ] >>349 は>>342 宛なんだから、「ここで言う」はmaxマクロに対応させないと。
358 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 15:14:41 ] なるほど。確かにそっちはそうだな。
359 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 18:25:13 ] 今北産業。 >>284 > 「単独の文 > *++p; > は間接参照の文が無意味である。」 > ってどう意味なのでしょうか? > 実例を挙げていただけないでしょうか。 無意味でない例なら出せる。 volatile int* p; とか宣言されていて、p が実はメモリマップド I/O で読むだけでも意味がある場合がある。 >>293 > #define sub(x) (x < 0 ? -x : x) sub(a+b) とかでおかしくなるから >>342 みたいに () 使おう。
360 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 18:29:58 ] >>359 p が volatile int* であっても *++p; と書いて、pがdereferenceされることは保証されてないだろ。
361 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 19:14:24 ] >>360 すまん、よくわからんのだが「p が deference されることは保証されない」のは、特に *++p; に言える、と言ってる?それとも、 *p; でも同様だと言ってる?
362 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 19:24:20 ] >>360 とりあえず volatile な *p; については c0x.coding-guidelines.com/6.7.3.html の 1488-1489 辺りで「最適化で削除しちゃいかんよ」ってな事になってるが。 もっといえば volatile int x; x; でも一緒。
363 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 20:19:08 ] 更にいうと const volatile int x; x; でも処理系は x の読み出しを削除してはいけないし、 x の値を何かに使う場合複数回の読み出しで同じ値だと仮定してもいけない。 この場合の const は「書き込めません」っていう意味だ。
364 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 07:37:42 ] char *p; char *q; p = "hoge" + 1; q = "hoge"[1]; この場合pはoになることは正しいですよね。 pにはhのアドレスが代入される訳ですから。 んでqの場合は配列じゃないので、 char x[] = "hoge"; int r = x[1]; なら正しくrにはoが代入されますけれど、 q = "hoge"[1];とかいても警告は出ますし、 無意味な値が代入されるけれどもコンパイルはされてしまいます。 どうしてコンパイルエラーにならないんでしょうか?
365 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 07:55:01 ] "hoge" + 1 はポインタだが、 "hoge"[1] はポインタではない。
366 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 08:01:25 ] それは分かるんですけれども、 なんでコンパイル出来るのか? が疑問なんです。
367 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 08:04:43 ] >>364 char* p = 定数; ならわかる?
368 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 08:13:50 ] >>366 >pにはhのアドレスが代入される訳ですから。 間違い。
369 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 08:20:38 ] >>364 C言語だと、整数からポインタへの代入は警告止まりになる。 C++ だとエラーになる。
370 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 08:38:00 ] >>367 ,369 char* p = 定数; いや、もちろんポインタに数値をキャストしなくても 代入出来ることは知ってます。 q = "hoge"[1]; ってコンパイラはどういう風に解釈するんですか? >>368 >pにはhのアドレスが代入される訳ですから。 え、じゃ文字列の先頭のアドレスで正しいですか?
371 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 08:42:22 ] >>370 "hoge"+1なんだから、当然'o'ヘのポインタだ。
372 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 08:43:32 ] >>370 hのアドレス=文字列の先頭のアドレス 代入は+1が行われたあとだろ? だからすでにアドレスが変わってる
373 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 08:45:27 ] >>370 q = "hoge"[1]; と static const char x[] = "hoge"; q = x[1]; は大体同じ。
374 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 08:59:29 ] >>372 すいません、勘違いしてました。 >>371 ,373 えっと自分が聞きたいのは、 char *q = "hoge"[1]; という文がなぜコンパイル出来るかってことなんです。 char q [] ="hoge"; char *p = "hoge"; はあきらかに違うのに char *q = "hoge"[1]; がコンパイル出来るとまるでこの二つが同じように錯覚してしまって 間違いの元になるんじゃないかって思ったんです。 んで、そういう事が出来るのはきっと何か理由があるに違いないと思ったんです。
375 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 09:05:40 ] 特に理由はない。 文法上問題がないから警告止まりでコンパイルされるだけ。
376 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 09:08:16 ] > char q [] ="hoge"; > char *p = "hoge"; > はあきらかに違うのに > char *q = "hoge"[1]; > がコンパイル出来るとまるでこの二つが同じように錯覚してしまって > 間違いの元になるんじゃないかって思ったんです。 なぜ二つが同じように錯覚するの?
377 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 09:27:30 ] >>375 ほんとだ。 char *x = "hoge"; p = x[1]; がコンパイル出来る。 x 0x85fd8 p 0x6f pのアドレスってどこから出てきたんだろう?
378 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 09:28:33 ] >>374 = の右辺に書かれた T 型の文字リテラルは T 型の static 配列と同じです = の右辺に書かれた T 型の配列は T 型の配列の先頭要素を指す「Tのポインタ型」になります 理由としてはっつーか便利だし〜みたいな?
379 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 09:31:29 ] >>377 'o' に決まってるだろう。
380 名前:デフォルトの名無しさん mailto:とか言ったらまた食い付いてくるかな?sage [2007/08/16(木) 09:36:05 ] >>377 m9(^Д^)プギャー
381 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 09:39:47 ] >>377 一応言っておくけど0x6fはアドレスじゃないよ 'o'に対応するアスキーコード c-production.com/special/03090704.html
382 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 10:00:58 ] qはそれ自身が配列であり、右辺の"hoge"はコンパイラに対する 初期化内容としてのみ解釈される。定数"hoge"は実行時には存在しない。 pの場合、実行時に定数"hoge"をメモリ上に用意して、そのポインタを利用する。 なので同じように見えても右辺の意味がまったく違う。 もともとqは以下のように記述すべきものだったんだろうけど、 char q[] = {'h', o'', g'', 'e', '\0'}; 不便なので、利便性のために char q[] = "hoge"; という書き方も受け入れるようになっただけ。 結果的にpとqの右辺が似ているけど、たまたま。
383 名前:デフォルトの名無しさん [2007/08/16(木) 10:07:36 ] *p = "hooge" p[] = "hooge" は同じだろ
384 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 10:11:42 ] >>383 本気で言ってるのか
385 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 10:20:58 ] >>383 別物
386 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 10:44:01 ] >>383 どっちもセミコロンが無いからエラーになる→同じこと ってオチは無しだぞw
387 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 10:49:20 ] >>383 >>364 未満だな
388 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 10:49:57 ] 型名もないしな
389 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 10:52:18 ] フフ
390 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 11:30:57 ] void foo() { auto char *p = "hoge"; auto char p[] = "hoge"; … } とした時の挙動からして違うことは判るだろ
391 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 11:48:08 ] char p1[] = "hoge"; char *p2 = "hoge"; p1[1] = 'a'; p2[1] = 'a'; // <=
392 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 12:16:13 ] Perlの無名配列みたいに {1000,100,10}[0] もいけたらいいのに
393 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 12:24:01 ] C99 #include <stdio.h> #include <string.h> int main() { printf("%d\n", (int[]){1,3,5,7,9}[1]); }
394 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 12:33:57 ] >>393 こんな事出来るんだ。 知らんかった。
395 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 12:49:24 ] >>393 うは、いけるんやwありがと
396 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 21:01:08 ] 配列として認識されるのか…すげー
397 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 21:45:24 ] これでC99準拠のコンパイラがもっと増えてくれれば
398 名前:768 mailto:sage [2007/08/16(木) 22:36:05 ] C99、便利だけどC言語としてみるとキモい・・・
399 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 22:38:18 ] C++と同期とって進化してくれれば歓迎なんだけどな。
400 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 22:57:51 ] C99準拠のコンパイラって少ないの? GCCしか使ってないから知らんのだけど。
401 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 23:02:56 ] >>400 Comeau
402 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 23:06:00 ] 前使ってた Borland C++ 5.5.1 は C99 非準拠だったな.
403 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 23:06:01 ] ICC
404 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 23:20:10 ] VC++ のやつが無視しやがってるから広まらないのかな。
405 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 23:20:51 ] C99はDと同じ運命をたどればいいんだよ
406 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 23:22:13 ] VC++はC++コンパイラだからC99対応しないよ、ってMSの 中の人が言ったんだっけか。
407 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 23:29:51 ] 確かにVC++8.0で試すと凄い勢いでエラー出るな
408 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 23:35:47 ] まあ、C99 使うくらいなら C++ 使うってのは確かだが
409 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 00:35:35 ] 数式を画面に表示させるためのライブラリって無いでしょうか? x^2みたいなのを、綺麗に表示するためのライブラリがほしいのです。 できれば、ソース公開している奴で、無ければソースは無くてもいいのですが とにかく、アプリに組み込んで開発できる奴がいいです。 ちなみに、開発環境はVC++2005、WinXPProを想定しています。 動作環境も同様にXPProです。 よろしくお願いします。
410 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 04:48:29 ] >>409 ググっただけなんで、中身はシラネ。 www.vector.co.jp/soft/win95/prog/se363439.html
411 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 05:26:10 ] ビット演算がうまくなるコツってないですかね? 全く使いこなせてないので、 他人のソース読んでて、使いこなせていると凄く羨ましいんですけれど。
412 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 05:27:47 ] 才能ないよ諦めた方がいい
413 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 05:37:52 ] コラー!
414 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 05:49:50 ] 自虐し過ぎ
415 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 06:14:34 ] >>411 グラフィックまわりをいじって変な画面効果とか作るのが楽しいかも 上達が見てわかるし
416 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 08:06:25 ] >>411 エンディアンと変数型のバイト幅を意識すること。 算術シフトと論理シフトを意識すること。 コツっていうとこんぐらい? フラグ的な使い方の話だったら、 必要になった時だけ使うのが良いんじゃないかなぁ。
417 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 08:08:28 ] >>411 論理演算、真理値表、2進数⇔16進数変換。 この辺のキーワードを調べ使いこなせるようになるとずっと違うと思うよ。 例えばこんなの。 a b c r 0 0 0 0 0 0 1 0 0 1 0 1 0 1 1 0 1 0 0 x 1 0 1 x 1 1 0 0 1 1 1 1 こいつからrを求める式を導き出せれば一歩前進。
418 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 09:16:08 ] 皆さんアドバイス有り難うございます。 ビット演算は大事ですからね。 精進します。 >>417 グヌヌ。 難しいぞ。分かんないっす。
419 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 09:22:07 ] プッ ヘボすぎ
420 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 09:29:14 ] ~(a^c)&b こうですか?
421 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 10:04:58 ] タンクローリーを運転する人に見えたのは俺だけでいい。
422 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 11:18:41 ] int foo; int bar; bar = (unsigned int)foo & 0x0fffffff; という事をしょっちゅうしているプログラムがあるんですけど、 どういう意図を持ってこの処理をしてるんでしょうか? 最初は、int型の変数をunsigned int型にキャストしてint型の変数に代入すると、 例えば-5が代入されてたら4294967291になるのかなぁと思ってたんですが、 そういう訳でもないみたいですし。
423 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 11:21:44 ] >>422 意図については、そのプログラムを書いた人に聞くのが一番! あと、もう少し基礎を勉強したほうが良いよ
424 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 20:27:31 ] 動的な配列を作る時は int* a=(int*)malloc(sizeof(int)*10); if(a==NULL) みたいにしてポインタが有効かチェクしますよね? 二次元の配列を作る目的で int** b=(int*)malloc(sizeof(int*)*10); とやったら、この時も if(b==NULL) で、bが有効なポインタかどうか判断していいんですか?
425 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 20:31:19 ] はい
426 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 21:12:36 ] >>424 if(b==(void**)0)
427 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 22:36:27 ] >>424 #include<stdio.h> #include<stdlib.h> #define X_SIZE 15 #define Y_SIZE 10 int main(void){ int x, y; int **b; b=malloc(sizeof(int*)*Y_SIZE); if(b==NULL) exit(1); b[0]=malloc(sizeof(int)*X_SIZE*Y_SIZE); if(b[0]==NULL) exit(1); for(y=1;y<Y_SIZE;y++) b[y]=&b[0][y*X_SIZE]; for(y=0;y<Y_SIZE;y++) for(x=0;x<X_SIZE;x++) b[y][x]=y*X_SIZE+x; for(y=0;y<Y_SIZE;y++){ for(x=0;x<X_SIZE;x++) printf(" %3d", b[y][x]); printf("\n"); } free(b[0]); free(b); return 0; }
428 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 23:01:35 ] >>426 キャストしたらダメだろ。 意味変わる。
429 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 23:07:24 ] >>420 それでもいいけど、(b&~c)^aの方がシンプルだろう。
430 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 01:15:04 ] a^b&~c ってなところか。 >>411 最低限の論理学の勉強をする。 ド・モルガンの法則とかは必須。
431 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 07:42:18 ] #define NULL (void*)0 だから ポインタへのポインタが"NULL"かどうかは (void**)0で調べないといけない
432 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 08:20:03 ] >#define NULL (void*)0 >だから いいえ。
433 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 10:12:01 ] 世界中のC言語を使える人のコンピューターに対する理解度の高さの平均と、 世界中のJavaを使える人のコンピューターに対する理解度の高さの平均は、 どっちが高いですか?
434 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 10:16:53 ] マルチ死ね
435 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 10:18:08 ] >>433 スレ違い
436 名前:DEFORTの名無し [2007/08/18(土) 13:41:52 ] ひさしぶりぶり MinGWつかってみたけど微妙
437 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 13:47:02 ] またお前か
438 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 14:28:50 ] >>422 0x0fffffff でマスクってことは、下位28ビットが欲しいってだけじゃね。 あと、unsigned int へのキャストは無駄だな。
439 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 15:32:58 ] >>431 どこからそんなデマを仕入れてきた?
440 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 16:02:21 ] 脳内
441 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 16:06:10 ] 新聞
442 名前:デフォルトの名無しさん [2007/08/18(土) 20:10:13 ] ある特定のウィンドウがアクティブになった時に、そのウィンドウのメニュー内の 特定のコマンドを実行するようにしたいのですが、どのよう記述したら良いでしょうか? 具体的にはXSIとゆう3DCGソフトの「アニメーションエディタ/編集/オリジナルコマンド」 を自動実行させたいのですが、、、 宜しくお願いします。
443 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 20:13:48 ] C/C++じゃなくてスクリプトで書けば?
444 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 20:16:44 ] C/C++の勉強すれば分かるよ
445 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 00:24:05 ] WSHとかの領域になるんかな?あっちの詳細を全部知ってるわけではないけれども
446 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 00:43:34 ] new int[n]; ← このnのところは、何の型で渡すのか決められてますか? intとかlongとか(負数はあり得ないので、unsignedでしょうか) あと、Windowsの32ビット環境では、intとlongはまったく同じ型として扱っても問題ないですか?
447 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 00:45:47 ] >>442 ウィンドウメニュー内の特定のメニュー項目が選択されたときって、 たぶん、WM_COMMANDとかのウィンドウメッセージが飛ぶと思うんだけど、 その具体的なパラメタを調べて、アクティブとかのイベント関係なく 直接呼んじゃだめなの? もし、アクティブになると同時って条件をつけたいなら、 1)ウィンドウをアクティブにする 2)ウィンドウメッセージを送信する っていうだけの簡単なプログラムを作るとか。
448 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 01:13:18 ] >>446 特定の型には決まっていない。整数ならいい。 負の数になったら未定義動作。 int と long は違う型です。
449 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 01:30:05 ] music8.2ch.net/test/read.cgi/musicjf/1187412818/72 おもしろいIDでた
450 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 01:32:34 ] わざわざ他板のを持ってこなくてもいいんだよ
451 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 01:34:41 ] >>448 ,446 >特定の型には決まっていない。整数ならいい。 C++の言語仕様の詳細は知らないけど、VCならsize_tでいいんじゃね msdn2.microsoft.com/en-us/library/t48aek43 (VS.80).aspx msdn2.microsoft.com/en-us/library/ms859258.aspx >int と long は違う型です。 これもVC(x86)の範囲内で同じようにつかえるかって質問なら、問題ないと思うけど msdn2.microsoft.com/en-us/library/ms859270.aspx
452 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 01:36:23 ] >>450 この板ID無いが。
453 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 01:57:33 ] >>451 operator new 関数の第1引数は VC に限らず size_t 。 でもそれと new 式の配列要素数を表す式の型とは別。 サイズが同じだろうがなんだろうが int と long は違う型。 まったく同じ型として扱うのには問題がある。
454 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 03:13:14 ] >>453 ごめん、1点分からないので、教えていただきたい。 とりあえず、>>446 はVCの利用上(実装上)の制限が知りたいんじゃないの、 と思ったので、その観点だけで書いたのは自分の思い込みで、それで意見が すれ違うのは仕方ないんだけど、 >特定の型には決まっていない。整数ならいい。 >でもそれと new 式の配列要素数を表す式の型とは別。 の箇所。 そうはいっても、ソースをコンパイルしてバイナリに落とす以上、コンパイラ定義かも しれないけど、具体的な値の有効範囲ってかならずあるんじゃないの? 実際、MSDNの配列定義のサイズ指定の箇所では 0以上の整数型、ただしMicrosoft仕様では... としてsize_tに言及してるわけだし。 それにoperator new 関数の第1引数がsize_tに決まってるなら、size_t以上の値を 記述して受け入れてくれるコンパイラがありそうにないので、 その意味でも「整数ならいい」ってのはあいまいな感じがする。 なので、「整数ならいい」ってのは純粋に言語仕様の話として語っているのか、 それとも、コンパイラの実装やソース記述上の制限を語る場合でも同じ回答 になるのか、気になって眠れなくなりそうなんで、正確なところが知りたいんだけど。
455 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 03:20:37 ] ________ / | /__ | / /. |-―‐. / \ / | / ./ | ノ ヽ__」 | .―┼‐フ |/ /|/ ̄ ̄ ̄\ //| | | | | (二X
456 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 03:39:56 ] >>454 現行の規格ではだいたい >>453 みたいなことしか言えない。ある意味 これが正確なところ。 new とは別に、各処理系が定めるべきいろいろな数値の上限の中に 「オブジェクトのサイズ」というのがある。配列オブジェクトもこの制限を うけるので、値の範囲はこれに基づくとも言える。これについて規格が 最低限のガイドラインとして提示しているのは 262144 。 まだ規格化はされてないけどこんな話もある。 www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#624
457 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 04:45:36 ] ありがとう、これで寝られる。 仕様自身は結局釈然としない部分があるけど、 >>448 ,453の回答が正確で誠実な回答というのは理解できた。 リンク先は策定中の次期規格? また、膨大な項目が... 現状でさえ、もうついていけないくらいややこしいのに。
458 名前:デフォルトの名無しさん [2007/08/19(日) 12:35:03 ] #include "DxLib.h" int WINAPI Winmain(HINSTANCE hI, HINSTANCE hP, LPSTR lpC, int nC) } ChangeWindowMode(TRUE); if(DxLib_Init()==-1)return(-1); DrawBox(0, 0, 120, 65535, TRUE); WaitKey(); DxLib_End(); return(0); } というプログラム書くとエラー出るのはなぜでしょうか?ちなみに 14さいからはじめるリアルに動くゲーム物理プログラミング教室C言語編 という本に載ってます。
459 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 12:38:39 ] エラーの内容かけ。
460 名前:458 [2007/08/19(日) 12:40:14 ] エラー E2141 C:\Users\shiro\Desktop\MyC\dxtest\dxtest.cpp 4: 宣言の構文エラー エラー E2190 C:\Users\shiro\Desktop\MyC\dxtest\dxtest.cpp 4: 不要な } エラー E2190 C:\Users\shiro\Desktop\MyC\dxtest\dxtest.cpp 4: 不要な } エラー E2303 C:\Users\shiro\Desktop\MyC\dxtest\dxtest.cpp 5: 型名が必要 エラー E2356 C:\Users\shiro\Desktop\MyC\dxtest\dxtest.cpp 5: 'ChangeWindowMode(int)' の再宣言で型が一致していない エラー E2344 C:\Users\shiro\Desktop\MyC\プロジェクトに追加すべきファイル_BCC用\DxLib\DxLib.h 1017: 一つ前の 'ChangeWindowMode(int)' の定義位置 エラー E2063 C:\Users\shiro\Desktop\MyC\dxtest\dxtest.cpp 5: 不正な初期化 エラー E2293 C:\Users\shiro\Desktop\MyC\dxtest\dxtest.cpp 5: ) が必要 エラー E2040 C:\Users\shiro\Desktop\MyC\dxtest\dxtest.cpp 6: 宣言が正しく終了していない エラー E2303 C:\Users\shiro\Desktop\MyC\dxtest\dxtest.cpp 7: 型名が必要 エラー E2356 C:\Users\shiro\Desktop\MyC\dxtest\dxtest.cpp 7: 'DrawBox(int,int,int,int,int,int)' の再宣言で型が一致していない エラー E2344 C:\Users\shiro\Desktop\MyC\プロジェクトに追加すべきファイル_BCC用\DxLib\DxLib.h 1519: 一つ前の 'DrawBox(int,int,int,int,int,int)' の定義位置 エラー E2063 C:\Users\shiro\Desktop\MyC\dxtest\dxtest.cpp 7: 不正な初期化 エラー E2293 C:\Users\shiro\Desktop\MyC\dxtest\dxtest.cpp 7: ) が必要 エラー E2040 C:\Users\shiro\Desktop\MyC\dxtest\dxtest.cpp 11: 宣言が正しく終了していない エラー E2190 C:\Users\shiro\Desktop\MyC\dxtest\dxtest.cpp 12: 不要な } *** 16 errors in Compile *** ** error 1 ** deleting Debug\dxtest.obj です。 ちなみに今日勉強したばかりでさぱりとわかりません
461 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 12:41:46 ] 勉強してないからエラーが出る
462 名前:デフォルトの名無しさん [2007/08/19(日) 12:42:05 ] どんなエラーがでてるの?
463 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 12:42:21 ] 最初に4行目にエラーが出ているだろう。 4行目を穴があくまでじっくり見ろ、その教科書とひたすら比較しろ。 それでわからなかったらもっかいおいで。
464 名前:デフォルトの名無しさん [2007/08/19(日) 12:45:46 ] 彼はエラーの見方がわからないと思う
465 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 12:46:33 ] #include "DxLib.h" int WINAPI WinMain(HINSTANCE hI, HINSTANCE hP, LPSTR lpC, int nC) { ChangeWindowMode(TRUE); if(DxLib_Init()==-1)return(-1); DrawBox(0, 0, 0, 120, 65535, TRUE); WaitKey(); DxLib_End(); return(0); }
466 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 12:49:38 ] ChangeWindowMode(1); こっちのがいいかも分からんね
467 名前:458 [2007/08/19(日) 13:11:31 ] >>465 のように書いてみましたが まだ Fatal: ファイル VORBISFILE_STATIC.LIB が開けません と出ます。 >>464 まったくおっしゃるとおりです
468 名前:デフォルトの名無しさん [2007/08/19(日) 13:59:36 ] >>467 エラーの通りvorbisfile_static.libってファイルが見つからないんだろ。 あとは環境が分からないと何も言えないと思う。 自分の開発環境を検索ワードに入れて、 (「vorbisfile_static.lib VC++」とか「vorbisfile_static.lib BCC」とか) その辺でググって見たらどうよ?
469 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 15:14:22 ] というか似たような質問を、DxLibのサイトで何度も見た気がするんだ。
470 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 15:55:17 ] vorbisfile_static.libはDxLibのアーカイブに同梱されてるから それをソースと同じディレクトリにコピー というか「このフォルダのファイルを全てコピー」みたいなフォルダなかったか?
471 名前:230 [2007/08/19(日) 23:24:29 ] GNU Compiler Collectionのg++コンパイラで -std=c++98というコンパイラオプションというのがあるらしいのですが ぐぐってもよく分かりませんでした。 誰か教えてください。
472 名前:471 [2007/08/19(日) 23:25:32 ] 230というのははミスです。すみません(汗
473 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 23:42:30 ] コンパイラマニュアルとかないの?
474 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 23:48:12 ] >>471 gcc.gnu.org/onlinedocs/
475 名前:471 [2007/08/19(日) 23:49:45 ] どもです。探し見てみます。
476 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 23:51:50 ] もう見てないかな まるちか?2ちゃんではマルチポストは叩かれるですよ せめて、主とする、質問したスレを付記 機嫌が良ければ、そこにヒント書きますから
477 名前:デフォルトの名無しさん [2007/08/19(日) 23:56:08 ] 今更VC++6.0のMFCなんですけれど、 ツリーコントロールのアイテムの文字列が長いときに 横スクロールにせず、文字列を折り返すことってできますでしょうか?
478 名前:デフォルトの名無しさん [2007/08/20(月) 01:12:13 ] curses(ncurses)のプログラミングを euc-jp 環境で行って来たのですが、 訳あって utf-8 環境で行うことになりました。 euc-jp 環境で作ったファイルを utf-8 環境に持ってきて、 iconvで文字コードを変更し、コンパイル、実行すると、出力(日本語)が文字化けてしまいます。 utf-8 環境に持ってきた euc-jp のファイルを、 文字コードをそのままにして、端末の表示文字コードを utf-8 から euc-jp に変更した上で、コンパイル、実行すると、正しく表示されます。 これななぜでしょうか? curses が utf-8に対応していないとかってありますか?
479 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 01:14:08 ] >>478 ソース文字セットと実行文字セットは別。 gcc のオプション -finput-charset と -fexec-charset を参照すべし。
480 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 01:15:56 ] >>478 curses 関係あるのか? puts("あいうえお") とかで試せばわかると思うけど。
481 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 01:20:45 ] 先ずは問題の切り分けだね。 >480の言うように標準出力に出力してみてその時点で文字化けしているならgccのオプションなどを調節。 その上でcurses使うと化けるのなら、cursesの設定か何か、その辺りの調査。
482 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 01:36:08 ] operator=で返す自分の参照は、constつけるべきですか?
483 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 01:42:23 ] >>482 いいえ。
484 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 01:48:55 ] 寧ろつけてはいけません。
485 名前:デフォルトの名無しさん [2007/08/20(月) 02:10:18 ] >>447 どうもです XSIではコマンドを実行する際にエディタのIDのような物が必要で、 エディタウィンドウを複数開いている時には、コマンド実行前に その時アクティブなウィンドウのIDを取得する必要があります。 WM_ACTIVATEとかを使えば良いのでしょうか?
486 名前:デフォルトの名無しさん [2007/08/20(月) 02:24:33 ] 動画とかをエンコードするデコーダって色々ありますよね。 あれ使えるソフト作るのって大変なんでしょうか? AVIutlみたいなソフトって個人では簡単に作れないんですかね? どの辺勉強したらいいんでしょうか?
487 名前:デフォルトの名無しさん [2007/08/20(月) 02:27:35 ] >>478 です。 >>479 ,480,481 さんを参考にして少しいじってみました。 まず、480さんの言うように、単純に puts("あいうえお") を行うプログラムを書き実行してみました。 すると、”-finput-charset=utf-8 -fexec-charset=utf-8”が有る無しに関わらず、文字化けしませんでした。 次に、cursesのコンパイルを、”-finput-charset=utf-8 -fexec-charset=utf-8”を付けて実行してみたところ、やはり文字化けが発生しました。
488 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 02:43:20 ] 単にcursesがutf-8に対応して無いんじゃないの? utf-8だと端末上での漢字の幅がバイト長と単純に一致しなくなるし naiveな実装だと色々問題起きそう
489 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 03:30:44 ] VC++2005で<cstdio>等をインクルードすると、 std::printf はもちろん、名前空間のない ::printf も使えてしまいます。 BCB2006だと逆に、<stdio.h>をインクルードすると ::printf を使えますが、 std::printf も使えます。 どちらが正しいのでしょうか。また、正しくない方を正しくする方法はありますか?
490 名前:デフォルトの名無しさん [2007/08/20(月) 04:18:35 ] >>478 です。 www.hakodate-ct.ac.jp/~tokai/tokai/gtkmm/etc/p3.htm というサイトがあったので、 ・-lncurses ではなくて -lncursesw をリンクする ・#include <locale.h> ・setlocale( LC_ALL, "" ); を取り入れたところとりあえず、euc-jp 環境のファイルを utf-8 環境に持ってきて、 このファイルの文字コードを utf-8 に変えてコンパイルし実行すると、 文字化けしない ・・・というのは達成できました。 しかし、私は UNIX(LINUX) にあるような SLコマンド のクマAA バージョンを作って遊んでいたのですが、 euc-jp環境とutf-8環境では少し動きが変わってしまいました。 その動きの変わってしまう場所が、euc-jp環境で苦労して改良したところなので、 かなりショックです。 まぁ、なんとか解決策があればいいのですが、 私の知識ではちょっとつらいかも知れません。
491 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 07:47:38 ] for(;;) ; こんなのあるのね びっくり
492 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 09:25:05 ] 無限ループの常套手段
493 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 09:27:33 ] 俺はwhile(1)派
494 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 09:31:18 ] 自分も無限ループはwhile派かな カウンタが要るときはfor使うかもしらんけど
495 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 09:46:09 ] >>489 <cstdio> で std::printf が、 <stdio.h> で ::printf が使えるようになることになっている。 1つのヘッダで両方が使えるようになることは保証されない。
496 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 18:43:51 ] std::bad_allocを捕まえたりいろいろ例外処理を書いているのですが、 メモリ4GBもあるので、デバッグ中にbad_allocが投げられることは今まで一度もありません。 投げられた際の動作をデバッグしたいのですが、そういうときはどうすればいいでしょうか。 敢えてメモリを消費したりするんですか? ↑ではbad_allocのことですが、他にもWindowsのAPI関数が失敗したときとかも、 ちゃんと自分が書いた処理が動作するか確かめたいんですが。
497 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 19:07:29 ] throw std::bad_alloc();
498 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 19:37:17 ] >>496 適当にラップして失敗に相当する結果を返せばいいべ
499 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 20:47:05 ] 起動時に malloc(100000000) とか適当にやっとけば足りなくなるんじゃない?
500 名前:デフォルトの名無しさん [2007/08/20(月) 21:09:14 ] 例えば、"a"とか"あ"の文字コードを出力する方法ってありますか?
501 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 21:11:15 ] printf( "%d", 'a' );
502 名前:デフォルトの名無しさん [2007/08/20(月) 21:30:04 ] >>501 ありがとうございます。 このページ ash.jp/code/unitbl21.htm の、UTF-8の欄のような値を出力する方法ってありますか?
503 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 22:23:30 ] %Xでの表示をぐるぐるまわせばおわりだろうに。
504 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 22:26:44 ] >495 www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#456 によると、 > Including the header <cxxx> declares a C name in namespace std. > Including the header <xxx.h> declares a C name in namespace std (effectively by including > <cxxx>), then imports it into the global namespace with an individual using declaration. ということで、xxx.h だと std とグローバル両方で宣言されるというのが規格の意図らしい。 なので、BCB2006 の挙動は(それだけ見ると)規格に合致している。 が、現実的には > If you want to assuredly declare a C name in the global namespace, include <xxx.h>. > You may or may not also get the declaration in namespace std. > If you want to assuredly declare a C name in namespace std, include <cxxx>. > You may or may not also get the declaration in the global namespace. ということで、>495 が妥当な仮定。 規格もこの現状を追認する形での修正が提案されている。 >502 自分がやりたいと思っていることをもうちょい正確に表現して欲しい。 文字が表示されて欲しいのか、文字コードが表示されて欲しいのかどっち? 入力として考えているのはどんなデータ?外部から与えられる文字列か、文字列リテラルか。文字コードは?
505 名前:504 mailto:sage [2007/08/20(月) 22:28:32 ] 最初のアンカーは >489 につけるべきだった。
506 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 02:01:29 ] 別人ですが >>499 バグでそんな値(もっとでかい、0x40000000とか)を与えたことがあるけど、 無理に仮想記憶拡大して確保しようとして、システムが実質操作不能になるだけだった
507 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 02:33:09 ] Windowsって1プロセスが使用できるメモリ空間のサイズって指定出来ないの? Win2000の頃は2G制限とかあった記憶があるけど、今はどうなんだろ。
508 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 03:06:41 ] >>507 以下は単なる思いつき。 1. プログラムの改造が可能なら、自分用の一定量しか領域確保できないメモリマネージャを作る。 2. メモリ取得APIをフックして自力で制限する。 3. SetProcessWorkingSetSizeを指定して、同時にスワップを小さくする。
509 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 05:28:56 ] たった1000行のソースも完全に把握できねぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇ もうだめだぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁ
510 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 05:38:16 ] やっと気付いたか。 さっさと人生やり直せ。
511 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 08:15:52 ] >>509 1関数1000行なら窓から投げ捨てろ
512 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 08:40:46 ] 10万行超えると見る気すら失せる
513 名前:デフォルトの名無しさん [2007/08/21(火) 09:28:25 ] float hoge = new float[100]; foo->CopyArray(hoge); Cfoo:Cfoo() { float m_array = new float[100]; } void Cfoo:CopyArray( float arg[]) { arg = m_array; } 配列のコピーをしたいとき、 上のように配列の名前(=先頭のポインタ?) だけコピーするだけではダメなようなのですが、なぜですか? for(int i=0;i<100;i++) arg[i]=m_array[i]; } のように中身を一つずつきちんとコピーしないとダメなんでしょうか?
514 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 09:37:17 ] arg = m_arrayだとコピーじゃなくて同じ配列に別名を付けてるだけになる
515 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 09:43:12 ] ::memcpy(arg, m_array, sizeof(float) * 100));
516 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 09:47:54 ] std::copy(&m_array[0], &m_array[100], &arg[0]);
517 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 11:12:35 ] >>513 >float hoge = new float[100]; コンパイルできるコードを提示しなさい。 >arg = m_array; それは、仮引き数にメンバ変数の値を代入しているだけなので、仮引き数の寿命とともに無に帰します。
518 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 11:13:18 ] >>515 そんなコードを書く香具師は野垂れ死に値すると思います。
519 名前:513 [2007/08/21(火) 11:55:54 ] 皆さんいろいろありがとうございます。 >>517 >コンパイルできるコードを提示しなさい。 float* hoge = new float[100]; でした。 >それは、仮引き数にメンバ変数の値を代入しているだけなので、仮引き数の寿命とともに無に帰します。 というわけで、分かっておられると思いますが渡してるのはポインタでして 寿命は関係あるんですかね? >>514 これもちょっと理屈が分かりません。 なぜ配列に別名をつけてることになるんですか? 配列の名前って先頭のポインタをさしてるんじゃなかったでしょうか? >>518 一行で済むのでforで要素を一つずつコピーするよりは>>515 >>516 はいいかなと思ったんですが、 どうして>>515 はダメなんですか?
520 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 12:04:44 ] >>519 >寿命は関係あるんですかね? その仮引き数の寿命は、その関数を抜けるまでです。 ポインタがポイントしている先のことは言及していませんね。 もう少し、ポインタ変数と言うものを理解しておいた方が良さそうです。 >なぜ配列に別名をつけてることになるんですか? ポインタ変数にポインタ変数の値を代入するだけでは、 ポイント先の複写は行なわれません。 もう少し、ポインタ変数(ry >どうして>>515 はダメなんですか? どうしてダメじゃないと思うんですか?
521 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 12:06:18 ] >>519 > どうして>>515 はダメなんですか? float配列ならば動くけど、一般のオブジェクトの配列なら破滅的。 たとえば、string配列をmemcpyしたらどうなると思う?
522 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 12:17:40 ] float で大丈夫ならダメとは言えないだろ。もっといい方法があるってだけで。
523 名前:デフォルトの名無しさん [2007/08/21(火) 12:24:46 ] >>520 >ポインタ変数にポインタ変数の値を代入するだけでは、 >ポイント先の複写は行なわれません。 いま気づきました。狂ってました。すいません。 要するに考え方として 「呼ぶ側で作った配列を渡してm_arrayの中身をコピーして貰ってくる」んじゃなくて 「ポインタを渡してm_arrayの先頭のアドレスだけ貰ってくる」っていうような 感じの書き方はできないんですかね? 呼ぶ側で、m_arrayの先頭のアドレスとサイズだけ分かれば 中身にアクセスできそうに思うのですが。 例えば、クラスメンバで持っているprivateな普通のオブジェクトインスタンスのポインタなんかの場合は わざわざ中身をコピーしないでアドレスだけGet〜とかで貰って使ったりするじゃないですか? >どうしてダメじゃないと思うんですか? 試したらとりあえずうまくいったんで・・・ >>521 わかりません。floatでは一応動きましたが、なんでダメなんでしょうか。 サイズ指定した範囲をコピーすればうまく動くと思うのですが。
524 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 12:29:27 ] >>523 > 「ポインタを渡してm_arrayの先頭のアドレスだけ貰ってくる」っていうような > 感じの書き方はできないんですかね? なんでできないと思うの?
525 名前:デフォルトの名無しさん [2007/08/21(火) 12:31:36 ] >>524 書き方が分からないんで そういう書き方が出来るなら教えてください、 ってことなんですが。
526 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 12:34:01 ] やっぱりポインタ変数とポイント先の関係がわかっていないような……
527 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 12:35:28 ] floatやint、char[]ならmemcpyしても問題ないが、下みたいなクラスだと問題が出てくる class hoge { char *str; int length; }; main() { hoge* v1, v2; v1 = new hoge; v1->str = new char[100]; memcpy(v2, v1, sizeof(hoge)); strcpy(v1->str, "v1"); strcpy(v2->str, "v2"); printf("v1.str is %s.\nv2.str is %s", v1->str, v2->str); }
528 名前:デフォルトの名無しさん [2007/08/21(火) 12:41:40 ] >呼ぶ側で、m_arrayの先頭のアドレスとサイズだけ分かれば >中身にアクセスできそうに思うのですが。 思いついて下のようにやったらうまくいったようなのですが、 これってなんか危険だったりしますか? float* hoge = new float[100]; hoge = foo->GetArray(); Cfoo:Cfoo() { float m_array = new float[100]; } float* Cfoo:GetArray(){return m_array;}
529 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 12:47:45 ] >>528 最初のnew float[100]で確保したメモリはどうやって解放するんだい?
530 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 12:52:23 ] >>528 配列のコピーをしたいんじゃなかったのか?
531 名前:デフォルトの名無しさん [2007/08/21(火) 12:58:48 ] >>527 理解にしばらく時間を要します。 脳のクロックが著しく劣っているのですいません。 >>529 これでもうまくいったっぽいですが、これならOKですか? float* hoge; hoge = foo->GetArray(); Cfoo:Cfoo() { m_array = new float[100]; } float* Cfoo:GetArray(){return m_array;} >>530 すいません、コピーというか、m_arrayの中身を どうにかして呼ぶ側で使えれば何でも良かったのですが。
532 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 13:00:55 ] floatの計算速度ってdoubleよりも遅いんですか?
533 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 13:02:09 ] >>528 巧くいってない巧くいってない。 >>531 だから、なんでコードの断片載せるんだって。 で、なんでまたfooはポインタなんだ?
534 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 13:03:27 ] >>532 足し算などは同じ。超越関数などは速い可能性が高い。 しかし、他の方への変換が入ったりすると遅くなることもある。 結論:一概には言えない。
535 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 13:06:07 ] もうスマートポインタコンテナとかRange conceptとか使う方がいいよ
536 名前:513 [2007/08/21(火) 13:14:09 ] つまりはどうしたらいいのでしょうか?もうわけ分かりません。 やりたいことはCfooのメンバとしてもってるfloatの配列m_arrayの中身を コピーするなりポインタを貰うなり、どういう方法があるのか分かりませんが 正しい方法で使いたいってことなんですが。 元の中身を書き換える必要はありません。知れればいいです。 で、とりあえず531で動いてますが、これは危険でしょうか。 要素数は別個貰うなりすれば分かるので その範囲内だけアクセスするなら大丈夫そうなんですが、ダメですか。
537 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 13:16:58 ] >>536 特に問題はないんじゃないの
538 名前:デフォルトの名無しさん [2007/08/21(火) 13:28:14 ] >>537 そうですか。ではひとまずこれでやっときます。 どうもお騒がせしました。
539 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 13:36:29 ] 書き換えないなら戻り値はfloat *ではなくconst float *にするべきだな。 それ以前に、Cfooを何故ポインタにしているかを知りたいんだが。
540 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 13:52:24 ] floatならSSEで高速化しやすい
541 名前:513 [2007/08/21(火) 13:53:03 ] >>539 >書き換えないなら戻り値はfloat *ではなくconst float *にするべきだな。 なるほど。 >Cfooを何故ポインタにしているかを知りたいんだが。 特に理由はないですが、 newしたCfooのポインタをメンバとして持ってるだけです。 ポインタで持ってるほうがいろいろ別のクラスに連れまわしたりするとき便利かなと。 むしろなぜそこが気になるのか知りたいんですが。
542 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 14:03:17 ] >>541 >むしろなぜそこが気になるのか知りたいんですが。 半ば個人的な興味だ。無条件にnewしたがるJava出身者が身近にいるもんでね。 # しかも、悪いことにdeleteする癖はついてないと来たもんだw
543 名前:513 [2007/08/21(火) 14:06:22 ] >>542 はい、まさに私のことです。
544 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 14:10:56 ] W
545 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 14:16:01 ] >>542 BCB使いもnewする癖が‥‥
546 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 15:40:21 ] OOっぽく書こうとするとそうなるんじゃないかな C++的にはスマートポインタを使え、ということになるんだが いずれにせよ常にownershipを意識している必要はあるね
547 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 16:02:26 ] ローカルなオブジェクトまでnewを使い始めたらもう、末期症状だ。 # オブジェクトは全てグローバルに管理されているとしたら、それはそれで難だけど。
548 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 16:03:31 ] >>545 VCL使ってると確かにnew癖つくなw
549 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 18:22:21 ] カウンタ付けて自動でdeleteするclassくらい自作しろ
550 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 21:25:00 ] 何で既にあるもん作りなおさにゃならんのん・・・
551 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 22:27:07 ] boostの名前あげるとboost厨ウゼェとか言われるから
552 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 00:16:08 ] std::tr1::shared_ptrならいいのか?
553 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 04:50:10 ] 俺はboost::intrusive_ptrが好きだが、めんどい人にはめんどいだろうな。
554 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 10:37:52 ] もうIUnknown/comdef.hでいいよw
555 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 12:21:10 ] int main (int argc, const char * argv[]) { char string[] ="Hello,World"; char copystring[13]; stringcopy (string,copystring); printf("%s¥n",copystring); return 0; } void stringcopy (char *buff,char *copy){ int i = 0; while(buff[i]){ copy[i] = buff[i]; i++; } copy[i] = '¥0'; } でwhile(buff[i]){…}を for(i=0;buff[i] == 0;i++) copy[i] = buff[i]; とすると動かないんですけれど、何故ですか?
556 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 12:25:25 ] >>555 条件逆にして動くとでも思ってんの?
557 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 12:29:42 ] for(i=0;buff[i] == 0;i++){ printf("loop %d\n",i); copy[i] = buff[i]; } ってやってみたら、なにか気づくかも
558 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 12:36:13 ] わかった! for(i=0;buff[i] != 0;i++) ってすると動くぞ!
559 名前:デフォルトの名無しさん [2007/08/22(水) 12:49:13 ] Containerというクラス名をAAというクラス名にしたら、 Container.h:9: an anonymous union cannot have function members Container.h:26: abstract declarator `<無名 class>' used as declaration Container.h:26: anonumous 名前空間の集合体は static でなければなりません
560 名前:デフォルトの名無しさん [2007/08/22(水) 12:50:45 ] >>559 すいません、間違えて「書き込む」ボタン押してしまいました。 Containerというクラス名をAAというクラス名にしたら、 AA.h:9: an anonymous union cannot have function members AA.h:26: abstract declarator `<無名 class>' used as declaration AA.h:26: anonumous 名前空間の集合体は static でなければなりません というエラーが出てきたのですが、このエラーの意味が理解できません。 教えてください。
561 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 13:12:06 ] エスパー募集するんでもなければコード貼れよ。
562 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 13:16:23 ] >>560 最初のエラーだけとってみれば 無名共用体には関数メンバを持つことができない というエラー。 だから名前だけじゃなくて何か意味または構造が変わるような修正をしてると 思うけど、情報が不足してるのでこれ以上のことは分からない。
563 名前:デフォルトの名無しさん [2007/08/22(水) 13:42:53 ] >>559 です。 自己解決しました。 ContainerからAAに名前を変えたときに、 #ifndef CONTAINER #define CONTAINER #include "Container.h" #endif も #ifndef AA #define AA #include "AA.h" #endif としていたためにエラーが出ていました。 情報の足りない質問で申し訳ありませんでした。m(_ _)m
564 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 13:51:53 ] >>563 まあ、解決したのはよかったけど、 そもそものソースの構造がおかしいんじゃないのか? 普通は Container.h の中で全体を Container.h ----------------- #ifndef CONTAINER #define CONTAINER 〜 #endif ----------------- としてくくるんであって、includeする側では、二重取り込み防止マクロなんて書かないだろ。
565 名前:でいびす [2007/08/22(水) 16:08:55 ] VC++5.0でファイルリードをやってます。 その時、読込んだ値を文字として認識できるか 調べたいのですが、やり方を教えてもらえませんか? ループしながら、1文字づつ調べたいです。 ちなみに、文字列には半角の日本語と全角の日本語が混在しています。 お願いします。
566 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 16:23:15 ] 文字として認識ってのがあいまいだけど _ismbbprint あたり使えるか調べて見れ
567 名前:でいびす [2007/08/22(水) 16:51:43 ] >>566 _ismbbprintは使えませんでした。 ビルドが通らなかったです。
568 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 16:55:13 ] ttp://msdn2.microsoft.com/ja-jp/library/6d27cy2z(VS.80).aspx
569 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 16:59:27 ] なんだってVC++5.0なんてもんを使ってるんだ
570 名前:でいびす [2007/08/22(水) 17:04:29 ] >>569 古いプログラムをカスタマイズする事になったので使ってます。
571 名前:でいびす mailto:sage [2007/08/22(水) 17:11:52 ] >>570 古いプログラムをカスタマイズする事になっても使う必要ありません。
572 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 17:23:18 ] いやー、そうとも限らんぞー
573 名前:でいびす mailto:sage [2007/08/22(水) 17:24:06 ] >>570 いやー、そうとも限らんぞー
574 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 17:25:49 ] VC++5.0ってSTLがはじめてバンドルされた版だよな 無理やり使ったが、今にして思えばひでえ出来だった
575 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 19:20:05 ] new が失敗した時に NULL を返すことを前提にプログラムしてたりするんだろうなあ。
576 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 19:22:18 ] new が失敗した時に NULL を返すことを前提にプログラムしてたりしてます。
577 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 19:42:58 ] new(nothrow)使えば問題なし
578 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 19:45:10 ] newハンドラ使えば問題なし
579 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 20:49:37 ] set_new_handler じゃなくて _set_new_handler で、 new ヘッダじゃなくて eh.h で宣言されてたんだっけ。 bad_alloc は VC5 で宣言されてたっけ?
580 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 21:01:23 ] >>565 VCだと昔から日本語対応の関数はあって、どこかのバージョンで _ismbXXXX のようなマルチバイト系関数であることを明示するような 関数名になったはず。 それがVC++5.0かどうか知らないが、でもだから対応する関数はあるはず。 で、ぐぐると以下のサイトに適度に古そうな関数名がならんでいるので 試してはどうだろうか。 ttp://www.geocities.co.jp/SiliconValley-Bay/7437/c/is.htm
581 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 21:08:46 ] UTF-8だったりEUC-JPだったりISO-2022-JPだったりする可能性は? というのは余計なお世話か。
582 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 21:12:02 ] 文字コードについては>>565 が勝手に判断するでしょ。 だいたいVC++5.0の時代のアプリにShift_JIS以外使ってるとも思えないけど。
583 名前:でいびす mailto:sage [2007/08/22(水) 21:14:17 ] VC9使うことにしますた
584 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 22:09:24 ] VC++はソースのエンコードすら指定できない糞コンパイラ
585 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 22:13:51 ] >>584 はVC++はソースのエンコードすら指定できないコンパイラと思っている糞
586 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 22:20:15 ] できるの? clにそれらしいオプションが見当たらないからできんのかと思ってた
587 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 22:24:34 ] >>585 どうやって指定するの?
588 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 22:31:21 ] >>585 おれもきになる
589 名前:デフォルトの名無しさん [2007/08/22(水) 22:40:08 ] std::vector<foo> hoge という変数があるとして、 これを関数の引数に渡すときはhogeのポインタを渡した方が hoge自体を値渡しするより動作は速いですか?
590 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 22:41:32 ] その通りだが、せっかくC++なのだからリファレンス渡しするか iteratorを渡せ
591 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 22:43:22 ] 何すかそれ
592 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 22:45:33 ] void hogehoge(std::vector<foo>& rhoge);
593 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 22:48:03 ] >>591 void swap_ptr(int *a, int *b) { int tmp = *a; *a = *b; *b = tmp; } void swap_ref(int &a, int &b) { int tmp = a; a = b; b = tmp; } main() { int m = 1, n = 2; swap_ptr(&m, &n); swap_ref(m, n); } swap_ref()がリファレンス渡し。 この場合は入出力引数だが、入力だけでいいんならconstつけろ。
594 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 22:50:19 ] >>590 サンクスコ
595 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 22:55:22 ] >>593 サンクスコ
596 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 23:12:21 ] ドトネトのMicrosoft.VisualC.CppCodeProviderってもしかしてclのかわりに C++コンパイルできんのか マネージドじゃないと無理かな
597 名前:デフォルトの名無しさん [2007/08/22(水) 23:37:33 ] vector<CHoge>::iterator itr; このitrが指してる要素の中身のアドレスを取りたいときは どうやって書けばいいんですか? CHoge* p_hoge; p_hoge = &itr; とか書いたら怒られました。
598 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 23:40:54 ] p_hoge = &*itr;
599 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 23:42:12 ] CHoge* p_hoge = &*p_hoge; vectorなら鼻からbegin()/end()を使わず、 &v[0]と&v[0] + v.size()でポインタを得て、 それをイテレータとしても使うという手もある。
600 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 23:42:39 ] >>598 出来ました。サンクスコ
601 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 01:12:40 ] 鼻から悪魔に見えた
602 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 01:13:32 ] >>584 エンコードの指定は出来ないが、 BOMが付いてればUnicode LE/BEやUTF-8はそれで判定する。 BOMがなければANSI文字コードとみなしている。 javacやunix系のコンパイラはUTF-8にBOMが付いてると処理してくれないものが多く、 双方で利用しようとすると結構めんどい。
603 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 01:13:53 ] 悪魔から鼻に見えた
604 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 01:49:46 ] >>577 そんなことしてもコンストラクタから飛んでくる例外は止まらないぜ。
605 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 01:50:20 ] なんかかっこいい
606 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 11:14:46 ] >>602 それなりに移植性考えたらC++のソースにBOMつけるとかありえんわな で、当然boostのソースにはそんなもんついてないし、一部のヘッダにLatin-1な 人名が入ってるから、VC++8.0でコンパイルすると色々苦情を言ってくんのな
607 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 22:47:56 ] C++でHTMLのタグのようなものを使用していたり、『::』のようなものなどを見かけます。 Cには無く、C++では使用出来るようなことを幅広く説明している書籍でお勧めのものはありますでしょうか。 発売年や価格、本自体の厚さなど数多くありすぎて、どういうものを購入すればいいのか分かりません。 近くに本屋さんはあるのですがプログラム関係は少ないですのでネット通販で買おうかと考えております。 それ故、内容が確認できず判断が・・orz
608 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 22:50:21 ] HTMLのタグ・・・確かにそう見えんことはないw
609 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 22:58:28 ] なんだそりゃ、templateのことか? あまりに斬新過ぎる見解でワロタ それはそうと、wxWidgetsのWindowProcって、ウィンドウクラスのインスタンス 見つけるのにわざわざグローバルなハッシュテーブル引いてんだな、なんだこりゃ せめてWin32ならGetWindowLongPtr()使ってくれよ なんかそうできない技術的理由があんのか ATLみたいなサンクに書き換えたら、そんだけで激高速化すんじゃね?
610 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 23:15:45 ] >>607 結局この本は必要…通読する対象ではない気がする、字引的にほぼ全部載ってる www.amazon.co.jp/dp/475611895X
611 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 00:31:15 ] そんなに高速化するわけない。 いったい一秒に何回メッセージが来て、 グローバルハッシュを引くのに何ナノ秒 余分にかかるというんだ?
612 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 00:37:41 ] 一秒に何回メッセージが来て、 グローバルハッシュを引くのに何ナノ秒 余分にかかる
613 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 00:38:15 ] 俺も初めて見たときはタグかと思った。 includeファイルに.hが付いていないことや、標準入出力に<<、>>を使うこと、 「::」の存在など何もかもが新鮮だったあの頃・・・ いまだに初心者の域を抜けられぬ現状orz
614 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 00:40:43 ] ::は斬新だった。こうゆう記号ってなんか意味を持って決められてるのかな?
615 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 00:43:25 ] 意味的に : を使いたいけど、ラベルと被るから :: にしたんじゃね?
616 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 01:44:24 ] 斬新といえばいえなくもないが、: (コロン)は、通常のラベルどころか ・caseのラベル(厳密にいえば通常のラベルと変わらない) ・クラス継承 ・コンストラクタの初期化子(?) ・条件演算子の一部 など、よくこれだけ機能を持たせられたと思うものだ。 さらに、ストリームにビットシフト演算子を使うなんて、どこのアホが考えたかと思う。 演算子オーバーロードを見せつけるための演出としか思われない。 さらに、マニピュレータだって?printf系の方がよっぽどうまく素早く整形できるわ。 あんなのC++委員会の遊びにすぎんよ。 もっとも、Cよりは便利なので使わせていただいていますけどね。
617 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 02:07:29 ] べ、別に好きでC++を使っているんじゃないんだからね! Cより便利だから使ってあげているだけなんだからねっ!
618 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 02:11:22 ] おっさんが書いてるんだぜ?きめぇ
619 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 02:11:29 ] >>616 iostreamとマニピュレータの登場は、標準化委員会の発足より古いはず。 D&Eによれば入出力に演算子を使うのはDoug McIlroy、 マニピュレータはAndrew Koenigのアイデアだそう。
620 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 04:31:27 ] printf より優れてる点は型安全な点とポリモーフィズムだな。 printf 風マニピュレータを作らなかったのは C++ の汚点だな。
621 名前:デフォルトの名無しさん [2007/08/25(土) 06:21:38 ] なんで queue には clear() が無いの?
622 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 10:13:32 ] ああ、すまん 作るの忘れてた
623 名前:デフォルトの名無しさん mailto: sage [2007/08/25(土) 10:32:35 ] 納得した
624 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 10:37:06 ] 何のqueueにclearが無いの?
625 名前:デフォルトの名無しさん [2007/08/25(土) 11:05:14 ] 参照渡しでもらった引数をさらに別の関数に参照渡しするのって なにか問題ありますか?
626 名前:デフォルトの名無しさん mailto: sage [2007/08/25(土) 11:09:57 ] G++ の STL の queue, priority_queue, stack. コンテナアダプタには clear() が用意されて無いけど何か理由があるんでしょうか.
627 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 11:55:33 ] G++wwwwwwなんという未来言語wwwwww
628 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 12:00:58 ] 無知発見
629 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 12:13:16 ] 自己解決しました.
630 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 12:15:02 ] >>627 これはひどいwwwwwww
631 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 12:27:56 ] >>627 =630 そんなエサで俺様が釣られるかクマー
632 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 13:55:48 ] >>625 別に問題ない。 寧ろ、参照渡しでもらったものをポインタ渡しするほうがおかしいし、 参照渡しでもらったものを値渡ししてしまったら意味が違ってしまう。
633 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 15:43:54 ] 何でないんだろうね。 プリンタジョブとかに queue を使ったとして、 ジョブを全部破棄とかすることあるだろうに。
634 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 16:01:42 ] 1億と2000年前からpopしなさい、というお達しか
635 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 16:12:47 ] while(!q.empty()) { q.pop(); } としろ、ということか。
636 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 17:14:26 ] そうだdequeをつかおう
637 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 17:16:04 ] q.~queue(); new(&q) std::queue<T>; 冗談だよ、冗談。
638 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 17:24:21 ] 素直にq=std::queue<int>();と書いてやれよw
639 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 17:40:57 ] queue のソースを書き換えればいいんじゃね?
640 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 17:47:21 ] queue を継承した my_queue を(ry
641 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 18:26:24 ] (x = 1) = 2; これ、Cだとエラーなんだが、C++ではコンパイルできる 何で?
642 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 19:11:39 ] x = 1の結果が、Cは右辺値、C++は左辺値と定められているから。
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を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。