1 名前:デフォルトの名無しさん [2009/03/02(月) 00:36:19 ] スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。 過去ログ スレを勃てるまでもないC/C++の質問はここで pc11.2ch.net/test/read.cgi/tech/1167476845/ スレを勃てるまでもないC/C++の質問はここで 2 pc11.2ch.net/test/read.cgi/tech/1178503366/ スレを勃てるまでもないC/C++の質問はここで 3 pc11.2ch.net/test/read.cgi/tech/1187521676/ スレを勃てるまでもないC/C++の質問はここで 4 pc11.2ch.net/test/read.cgi/tech/1221633708/ スレを勃てるまでもないC/C++の質問はここで 5 pc11.2ch.net/test/read.cgi/tech/1230516307/ スレを勃てるまでもないC/C++の質問はここで 6 pc11.2ch.net/test/read.cgi/tech/1231564903/ スレを勃てるまでもないC/C++の質問はここで 7 pc11.2ch.net/test/read.cgi/tech/1232983248/
554 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 16:59:10 ] >>その規則の多くはコードを早くしたり小さくしたりするためのものじゃない。 >>単に間違いをコンパイラが見つけやすくするため。 そうか? コンパイラにとって正しいけど、プログラマの意図通りにならないことは C++の方が多いのでは?
555 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 17:06:14 ] えーと、どこから突っ込めばいいの?C++が目指したのは基本的に効率だよ。 それは速度とコーディング効率で、プログラマの能力と方針にあわせて、 どちら側を重視する事も出来る。充分に熟練していれば、他の言語よりも高い バランスで、両立する事も可能。それは全ての言語の、全てのメリットを上回る 意味では無いけどね。現実には機能を散漫に付けすぎて、高いバランスどころの 騒ぎじゃないけど、目標としてはそんなところ。 >>554 どうも設計者が平均的プログラマの能力等を、考慮に入れなかったのでは無いかと予想。 自分で設計しといて、ベテランしか使えねーとか言ってるしねぇ。
556 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 17:21:38 ] 「間違いを犯す莫迦にこそ価値がない」 という仮定が間違ってるんだよ。 なぜなら、間違いを犯す莫迦しかいないから。 間違いを犯さないプログラマなんて一人も存在しないから。
557 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 17:28:43 ] 「オレの嗜好通りにソースを書かないやつはクズ」
558 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 18:26:47 ] C++標準化委員会に名前を列ねている連中だってbugを出すんだから、 ましてや昼間に書き込んでるネラーなんてなあ?w
559 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 18:58:04 ] >>556 全員一律に同じレベルの莫迦だということにしないと 自分を保てないというのなら そういうことにしてもよい。
560 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 19:06:06 ] つまり、自分は間違いを犯さないプログラマであるといいたいわけね。 ちなみに、99点も0点もどちらも「間違いを犯す」ことに違いないよ。 100点満点だけが「間違いを犯さない」といえる。 さぁ、ベン図を描いて確認だ!w
561 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 19:09:56 ] >>559 は「莫迦」の程度の話に摩り替えてるな 「間違いを犯すか否か」の話なんだが。 まぁいいか。論理的精密さを求めるような話でもない。 所詮は小さなプライドにしがみついた煽りあいだ。
562 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 19:10:19 ] 自分ひとりだけで完結する規模のものしかやらないのなら 将来メンテすることもないような使い捨てのものしか書かないならそれでいいじゃん
563 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 19:13:37 ] だな。それならいくら自分がバカで間違いだらけでも問題ない。
564 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 19:32:38 ] アンドリューハントによると、自分のプログラムにバグがないと思っているときには、バグは見つけられない。 言い換えれば、自分は間違いを犯さないと考えているプログラマは自分のプログラムからバグを見出せない。
565 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 19:42:27 ] このスレもム板化してきたな…技術の話しろよ、カスども。
566 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 19:53:58 ] >>565 ここはム版ですよ?w
567 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 20:05:29 ] >>565 一週間ぐらい我慢しろよカス
568 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 20:21:31 ] >>561 すりかえてなんかいねぇよ。 程度問題だろっつってんだよ。 >>556 の「間違いを犯す莫迦」の前に「ひとつでも」てのが付くなら、 そんな頭のおかしい「仮定」なんざ誰がしてるってんだ。
569 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 21:47:01 ] いや、頭がおかしいのはあなたですよ^^
570 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 22:00:27 ] いかに「あいまいな」仕様書が危険か、これでわかりましたね。 では、次の話題どうぞ。
571 名前:デフォルトの名無しさん [2009/03/27(金) 22:40:22 ] C++が危険なコーディングには警告を出すという方針なのだとしたら printfを使ってもC++コンパイラは全く警告を出さないからprintfを使うことはC++的に全く問題ないということだよ。
572 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 22:44:15 ] >>571 その考え方はおかしい
573 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 22:57:20 ] 警告を出すかどうかはC++の仕様で定められてはいない。コンパイラの実装者の考え次第だ。 実際、Stroustrupはいろんなことについて「これに警告を出さないコンパイラが多いのはがっかりだ」とか言ってるな。 D&Eに書いてある。具体的な事例はあんまり覚えてないが。
574 名前:デフォルトの名無しさん [2009/03/27(金) 23:10:50 ] C言語は上から順番に処理されるんだよね。 そうすると、割り込むみたいなことは許されないんだよね? 例えばfor文のループ中にキーを押したらそのときのtimeを取れるみたいなのは無理? for( ) ・・・・・・・・・ if(getchar 見たいなのじゃなくて、for文でゲームみたいなの動かしたいんだけど、 その途中でどんな途中でもtimeが取れるみたいなことは出来ないですか?
575 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 23:18:42 ] >>574 _beginthreadex
576 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 23:23:46 ] つ _kbhit()
577 名前:574 mailto:sage [2009/03/27(金) 23:29:12 ] 初心者板ってあるんですね。行って来ますすいませんでした。
578 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 08:28:32 ] UWSCというフリーソフトに [CHKIMG]という関数があります。 画像ファイルと一致する画像を発見すると、その座標を変数に格納するというものです。 これと同じ機能をC言語で実装するにはどのような関数を使えば良いのでしょうか?
579 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 08:45:58 ] >>578 Win32API に画面をキャプチャするのがあるから それで画面を取り込んで指定画像と比較すればいいんじゃないかな
580 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 15:35:03 ] すまん質問させてくれ 今C++のtemplateで新しく設計・作成したクラスがあるんだが main.cpp temp.h temp.cpp のようにソースを分けたいと思ってる でも、templateだから.objにしてしまうとビルドエラーが発生 何とか分けたいのだが、良い方法ないでしょうか?
581 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 16:49:25 ] 蛇足だと思うが、Templateはコンパイル時に計算されてしまうのでobjになった時点で定数になっている。 exportっていう仕様があるにはあるけど、各社ともに実装できなくて放置状態だ。いや、一個だけあったかもしれんが。。。 VC6でやってた記憶があるけど、もう忘れちゃったなぁ。 VC9使ってるが、ヘッダにベタ書きしてる。
582 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 17:09:53 ] >Templateはコンパイル時に計算されてしまうのでobjになった時点で定数になっている。 さっぱりワケが解ってないらしい。 (なんだ「計算」だの「定数」だのって)
583 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 17:16:43 ] そりゃ君の経験不足
584 名前:581 mailto:sage [2009/03/30(月) 17:33:07 ] CTFE(だっけ)が何で高速っていわれるかしってんの?しらないの??魔法じゃないのよ。 多分>>580 が望んでるのはジェネリックスのほうだと思う。
585 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 17:37:34 ] CTFEって何
586 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 17:38:49 ] en.wikipedia.org/wiki/Compile_time_function_execution
587 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 18:05:35 ] >>580 こういうのがあったが。 ttp://okwave.jp/qa270432.html これで解決かな??
588 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 19:13:56 ] >#include "TList.cpp" …分ける意味ねぇな、とか思わないのが不思議。
589 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 19:39:23 ] >>581 俺もヘッダにべた書きしてた事あるんだが ヘッダに書くなんてありえないとか言われて、それ以来分けてる template classを使ったのは速度を犠牲にしてでも、汎用性+αの目的の為 >>587 ありがとう。これは知らなかったからまた新しく知識が増えた 只、ヘッダ以外をインクルード…まあヘッダにベタ書きしたと思えばいいかな… 暫くはこれを使ってみます レスくれた方々本当に有難うございました
590 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 19:46:47 ] >ヘッダに書くなんてありえないとか言われて、 「ありえねぇよな、STL」と言い返せ。
591 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 20:02:36 ] printfは素晴らしいよね。 coutより使いやすい
592 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 20:24:38 ] でもたとえば template<> hoge< int >( パラメータリスト ) みたいなテンプレート特化がしぽぽファイルに書き込まれていると これはテンプラータ関数ではなく一般の関数と同じ扱いだから 定義を頭ファイルに書き込めないのであって(淫乱は別として) 多重定義アラーがでるよって思うな。あっさらーむ。
593 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 20:30:49 ] あぁ、そうそう。ただテンプレート特化の注意点についてだけ言及しても 解決策はどうしたらいいのってことになるので、つまりそこはグーグルだよ。おにいさん。 以下の「-inl.hファイル」という項が参考になる。 www.textdrop.net/google-styleguide-ja/cppguide.xml 要するに、もう一個、てんぷらクラス/関数専用のサブのヘッダファイルを用意して そこにてんぷらの実装コードだけを分離しつつ、 ヘッダファイルでそのサブヘッダファイルをインクルードしたらどうなの?って話。 これなら本来実装を書き込むしびびんファイルをいんこるどするよりも気持ち的に安全。
594 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 21:18:29 ] >>592-593 酔っ払いすぎ。
595 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 21:24:22 ] 今の話題がよく分からないんだが。 特に理解出来ないのが#include "TList.cpp"とかやってるサンプルが出てきてからなのだが、 この会話はレベルが高い話なのか低い話なのか? (このレベルってのはハードウェアに近いかどうかって意味じゃなくてね。) >>580 が悩んでるのはExplicit instantiationで解決する類の話じゃなくて?
596 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 21:28:39 ] ヘッダに置きたくない理由がわからんのにレベルもくそもあるかいな
597 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 21:29:06 ] そのエクストラボーキサイトイニシエーションとかいうのの詳細は このスレのちょっと前の方に出てきているわけです。 d.hatena.ne.jp/aki-yam/20081129/1227982516 しかしこれはソースの分離というより、 あらかじめ分離してコンパイルしたオブジェクトファイルを用意しておく という感じでありますね。いいです。すごく。おおきい。
598 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 22:31:51 ] >>597 オヤジギャグかますなよ
599 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 22:51:34 ] かます。>゚))))))<
600 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 20:04:07 ] グローバル変数って他のファイルからexternで参照できるよね。 グローバル変数にstaticを付けると、 他のファイルからexternで参照できなくなるの?
601 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 20:13:14 ] ぐぐれかす
602 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 20:29:10 ] >>600 そうだよ。
603 名前:600 mailto:sage [2009/03/31(火) 20:58:08 ] >>601 とっっくにググってあるよ。 ググった結果、>>600 のように解釈したんだ。 何の実りもないレスすんなカス。 >>602 納得できた。 ありがとう。
604 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 21:05:12 ] ちょっと試せば1分で判るような質問も、何の実りもないけどね
605 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 21:14:07 ] >>604 動いたかどうかじゃなくて正式な仕様として聞きたかったとか? だいたい2chで実りを求める方がおかしいよーな。 まあどうでも良いけど、これが火種になってスレが汚れないことを願う。
606 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 21:18:57 ] >>605 おまえが汚れだ。
607 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 21:28:20 ] >>606 2chに一生をかけてる人が「2chで実りを求める方がおかしい」発言にキレた構図。
608 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 21:34:15 ] >>607 バーカ
609 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 21:36:20 ] >>608 って言われてるのか。かわいそうだがお似合いなお方w
610 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 22:49:49 ] ,.、 .,r.、 ,! ヽ ,:' ゙;. ! ゙, | } ゙; i_i ,/ ,r' `ヽ、 | ,.、 ,r.、 ,i" _, ._ ゙; うーん・・・・ | ,! ヽ,:' ゙;. !. ・ ・ ,! | ! ,! } ヽ、 x _,r'' 僕には何も言えない |二゙; i二二二(⌒ノ"''`''''''''''''"´`ヽ. | ,r' `ヽ、 ´ヾ、 l l ,i" _, _ ゙; ! i___| !. ・ ・,! | t,ノ |ゝ_ x _::' !、、、、、、、、、、! |,/"`''''''''''''''"´';, | | | (,;! !) | | | |゙''::r--、::--;r' |____|_____| |―゙'ー-‐゙ー-゙'―┐ (,,,__(,,,____)
611 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 23:14:21 ] >>600 のせいでスレのレベルが落ちたな
612 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 23:16:48 ] >>611 もともと低かったろ。
613 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 07:46:43 ] 普通の頭であれば検索だけで理解できるからな 検索先が信じられずに2ちゃんのレスのほうを信じるのもどうかと思うし
614 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 08:14:01 ] ここは検索のスレではありません。 検索に関する会話はご遠慮下さい。
615 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 09:57:04 ] staticをつけると内部的な名前が変わる
616 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 13:13:50 ] かどうかは知ったこっちゃないわな。
617 名前:デフォルトの名無しさん [2009/04/01(水) 16:33:56 ] バイナリデータとテキストデータを結合してchar型配列に格納したいです。 例えば char STR[256] = {0}; unsigned long Value_A = 0x01234567; unsigned long Value_B = 0x89ABCDEF; char Str_A[] = "sample1"; char Str_B[] = "SAMPLE2"; というデータがあったとして、配列STRに以下のようにデータを格納するコードを教えて下さい。 < binary > < text > 0x01234567 0x89ABCDEF sample1|SAMPLE2 ちなみに、バイナリデータはテキストにはせず、BigEndianで格納したいです。 あとテキストには'|'文字を入れて区切りたいです。 よろしくお願いします。
618 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 17:24:58 ] #include <ctype.h> #include <stdio.h> #define swap(ul) ((ul)<<24)|(((ul)&0xFF00)<<8)|(((ul)&0xFF0000)>>8 )|((ul)>>24 ) void main() { unsigned char STR[256] = {0}; unsigned long Value_A = 0x01234567; unsigned long Value_B = 0x89ABCDEF; char Str_A[] = "sample1"; char Str_B[] = "SAMPLE2"; unsigned long ul; int i; ul = swap(Value_A); memcpy(STR, &ul, 4); ul = swap(Value_B); memcpy(STR + 4, &ul, 4); strcpy(STR + 8, Str_A); strcat(STR + 8, "|"); strcat(STR + 8, Str_B); for (i = 0; i < 8 || STR[i]; i++) { printf("%d:%02X[%c] ", i, STR[i], isprint(STR[i]) ? STR[i] : '.'); } } 0:01[.] 1:23[#] 2:45[E] 3:67[g] 4:89[.] 5:AB[.] 6:CD[.] 7:EF[.] 8:73[s] 9:61[a] 10:6D[m] 11:70[p] 12:6C[l] 13:65[e] 14:31[1] 15:7C[|] 16:53[S] 17:41[A] 18:4D[M] 19:50[P] 20:4C[L] 21:45[E] 22:32[2]
619 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 17:39:06 ] char * push_STR(char* d,char* e,char* s,int ln){ int i = 0; while(d < e && i < ln){*d++ = *s++; ++i} return d; } char *p = STR, *end = STR + sizeof(STR); if(p=push_STR(p,end,&Value_A,sizeof(Value_A)) >= e) abort(); if(p=push_STR(p,end,&Value_B,sizeof(Value_B)) >= e) abort(); if(p=push_STR(p,end,&Str_A,sizeof(Str_A)) >= e) abort(); if(p=push_STR(p,end,&Str_B,sizeof(Str_B)) >= e) abort();
620 名前:デフォルトの名無しさん [2009/04/01(水) 17:50:34 ] もしかしたら上の方のコードが途中かもしれませんが よろしくおねがいします。 C言語の入門ページの動的配列などの部分を読んで mallocやreallocでメモリの再確保などができる事はわかりました。 しかし、結果的にははじめに変数に入力をうけてその結果にあわせて 配列の量を変更する事はできません。 例えば文字列の入力を受け付けるプログラムでたとえば書籍の タイトルを受け取る処理なのでせいぜいこのくらいだろうと見積もって 配列の大きさをとっていたとしてユーザーが予定以上の 非常に長いタイトルの書籍を入力したりしても残りの部分は切り捨てられるように なってしまうと思います。これを回避する方法は無いでしょうか?
621 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 17:57:18 ] ない、と言ってしまうのは簡単だが もし上限がなかったらどうなるかを考えてみよう
622 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 18:02:15 ] 1文字ずつ受け取って、それらをリンクリストでつないでいくというのはどうだろう? メモリが許す限りどんどん大きくできるぞ。しごいね!
623 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 18:02:34 ] Stringクラスを使う
624 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 18:04:42 ] cstringでぐぐったら紐なしエロパンツサイトがヒットした
625 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 18:05:29 ] キー入力を都度処理してグルグル回せば出来ない事はないけど パイプ通しての洪水テキストや 例えばカナ漢字変換が驚くほど丈夫で数メガバイトの変換済文字列をイッキに送り込んでくるような状況 には対処しきれんよな
626 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 18:15:49 ] ありがとう御座います。 前もって入力を受け付けるときに文字数宣言が有る事を書いておきたいと思います。
627 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 18:24:43 ] そこでstream IOですよ
628 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 19:36:41 ] 結局メモリ+HDD(外部記憶装置)以上のデータは扱えないので扱えるデータには制限がある
629 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 19:39:55 ] ネットがあるじゃないか
630 名前:デフォルトの名無しさん [2009/04/01(水) 19:51:28 ] もうデバッグに一日以上費やしても理由がわからなかったので、ここで質問させてもらいます。 本当に理由が解明できなくてマジで困ってます…。 for (i=0; i < (Num_Points-1); i++) { distance_x = (gsd[i+1].x-cur_xpos) * (gsd[i+1].x-cur_xpos); distance_y = (gsd[i+1].y-cur_ypos) * (gsd[i+1].y-cur_ypos); distance = sqrt(distance_x + distance_y); } for (i=0; i < (Num_Points-1); i++) { a0 = atan2(cur_ypos-gsd[i].y, cur_xpos-gsd[i].x)-atan2(gsd[i+1].y-gsd[i].y, gsd[i+1].x-gsd[i].x); a1 = atan2(gsd[i+1].y-cur_ypos, gsd[i+1].x-cur_xpos)-atan2(gsd[i+1].y-gsd[i].y, gsd[i+1].x-gsd[i].x); } コンパイルエラーは出ないのですが、実行した際に途中で止まってしまいます。 何回か試したところ、上のループか下のループどちらか一方しか書いてない時は動きます。
631 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 19:58:34 ] 一日以上費やしたってデバッガ使った?
632 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 20:15:36 ] どっか別のところでスタック破壊してんじゃねーの?
633 名前:デフォルトの名無しさん [2009/04/01(水) 20:15:52 ] 使いましたが、デバッガではよくわかりませんでした。 どちらのループも単体でしかコードに存在しない時は動くので、 printfで結果表示した場合、ちゃんと計算結果が出ます。 しかし、両方ともコードに書くと、なぜか止まってしまうんです。
634 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 20:46:09 ] >>633 for文の中でiを表示したらどこまで進むの?
635 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 20:53:29 ] 本当に>>630 の通りに書いてあるならループにする意味がねーよw
636 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 21:08:33 ] >>634 どちらかのループ単体のみの実行なら、Num_Points-2まで進んでいます。 なので、配列の範囲外から数を呼び出してるということはないみたいです。
637 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 21:15:24 ] >>635 エイプリル・フールは午前中までだってのにな
638 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 22:09:54 ] ソースアップすれば調べてもいいよ
639 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 22:51:04 ] >>635 distance, a0, a1 がクラスのインスタンスで、 = がオーバーロードされてるかもよ。
640 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 23:58:38 ] 本人かデバッガ使って解らないものを、他人が不定な変数の多い 部分的ソースだけ見せられて判るとは思えない。
641 名前:デフォルトの名無しさん [2009/04/02(木) 00:04:08 ] >>636 上のループで1からNum_Points-2まで進んで 下のループでも1からNum_Points-2まで進んだってこと? それなら処理終わってるよね? せっかく解決しようと聞いているんだから省略しないできっちり説明してほしいな。
642 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 00:40:04 ] >>641 上のループ、もしくは下のループどちらかしか書いてなければ正常に動きます。 だから、printfでiがどこまで進んでいるかも確認して、Num_Points-2まで進んでました。 このループを両方コードに書いてプログラム実行すると止まって、 printfで表示できてたものも表示されなくなってしまいます。
643 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 00:48:48 ] >>642 printfを具体的にどこにどのように入れてるのか知らないが、つまりループを両方書くと 実行時に最初のループに入ってすらいないということか? もし可能であれば、実際にその問題が生じるような最小限のコード全部を書いてほしい。 つまり、俺らがそのままコピペして自分でコンパイルしてみると、同じ問題に遭遇できるようなコードってことね。 それが出来れば問題解決のための労力は少なくて済む。 まあ実際にはかなり長いコードになっちゃうのかもしれないけど。 あと、君が使ってるコンパイラに特有のトラブルだったりすると、助言できないかもしれない。
644 名前:デフォルトの名無しさん [2009/04/02(木) 00:54:16 ] >>634 これ↓実行したら何が表示されるの? Num_Points=1 fprintf(stderr, "start(1) Num_Points=%d\n", Num_Points); for (i=0; i < (Num_Points-1); i++) { fprintf(stderr, "(1)[i=%d][Num_Points=%d]\n", i, Num_Points); distance_x = (gsd[i+1].x-cur_xpos) * (gsd[i+1].x-cur_xpos); distance_y = (gsd[i+1].y-cur_ypos) * (gsd[i+1].y-cur_ypos); distance = sqrt(distance_x + distance_y); } fprintf(stderr, "end(1) Num_Points=%d\n", Num_Points); fprintf(stderr, "start(2) Num_Points=%d\n", Num_Points); for (i=0; i < (Num_Points-1); i++) { fprintf(stderr, "(2)[i=%d][Num_Points=%d]\n", i, Num_Points); a0 = atan2(cur_ypos-gsd[i].y, cur_xpos-gsd[i].x)-atan2(gsd[i+1].y-gsd[i].y, gsd[i+1].x-gsd[i].x); a1 = atan2(gsd[i+1].y-cur_ypos, gsd[i+1].x-cur_xpos)-atan2(gsd[i+1].y-gsd[i].y, gsd[i+1].x-gsd[i].x); } fprintf(stderr, "end(2) Num_Points=%d\n", Num_Points);
645 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 00:59:13 ] >>643 printfはどこに入れても実行されないです。 このループを二つ入れると、そのvoid関数の部分のprintfは全てダメになります。 結構変数値を他の部分から呼び出してて、 その部分に関しては別の人がやった部分なので最小限のコードを作るにも少々時間かかると思います。 他にも少しやらなくてはいけないことがあるので、もしそれができたら戻ってきます。 ここまで、あまり上手く説明できなくて御迷惑おかけしました。 レス下さった方々、ありがとうございます。
646 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 01:03:50 ] 最小限のコードなんて作らなくていい。 とりあえず>>644をコピペすればいいだけだろ。
647 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 01:06:28 ] 無駄骨
648 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 01:10:54 ] ステップ実行して、どこで爆死してるか見つけないとダメじゃね? どっかでメモリ、ぶっ壊してるのだろ、きっと
649 名前:630 mailto:sage [2009/04/02(木) 01:30:25 ] >>644 何も表示されません…。自分が両方のループ入れた時の症状と同じです。
650 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 05:50:46 ] もう4月馬鹿は過ぎているんだから釣りは勘弁してくれ。
651 名前:デフォルトの名無しさん [2009/04/02(木) 06:40:26 ] #include<stdio.h> int sum(int x,int y){ return x+y; } int max(int x,int y){ return x*200+y*300; } int main(void){ int x,y,i,am,pm; char cl; for(i=0;i<9;i++){ scanf("%s %d %d",&cl,&x,&y); am=sum(x,y); pm=max(x,y); printf("%s %d %d\n",cl,am,pm); } return 0; } と書いて実行するとき、%sの読み込みにc1と入れても 出力の%sではcだけとしか表示されないんです。 誰かこの謎の答えを教えてください。
652 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 06:46:18 ] >>651 char cl; → char cl[5000];
653 名前:デフォルトの名無しさん [2009/04/02(木) 07:03:43 ] >>652 さん ありがとうございます!!ありがとうございます!! 何でこんなことにも気づかなかったんでしょ(;'ω`)アホだ自分…
654 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 07:32:36 ] >>633 「デバッガでは良く分からない」んじゃあない お前がデバッガを分かってないだけ
655 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 07:38:41 ] >>651 char cl[100]; if (scanf("%99s%d%d", cl, & x, & y) != 3) fprintf(stderr, "Illegal input.\n);
656 名前:デフォルトの名無しさん [2009/04/02(木) 08:14:44 ] ここからユーザ定義関数で処理しなくてはならないんだが、 コレ以上の行動は俺の頭ではむりです…誰か助けて下さいorz #include<stdio.h> #define ROW 8 /*縦*/ #define COL 8 /*横*/ int main(void){ int i,j; int matrix[ROW][COL] ={ {'#','*','*','*','*','*','*','*'}, {'#','*','*','*','*','*','*','*'}, {'#','*','*','*','*','*','*','*'}, {'#','*','*','*','*','*','*','*'}, {'#','*','*','*','*','*','*','*'}, {'#','*','*','*','*','*','*','*'}, {'#','*','*','*','*','*','*','*'}, {'#','#','#','#','#','#','#','#'}}; for(j=0;j<COL;j++){ for(i=ROW-1;i>=0;i--){ printf("%2c ",matrix[i][j]);} printf("\n");} printf("\n"); for(i=ROW-1;i>=0;i--){ for(j=COL-1;j>=0;j--){ printf("%2c ",matrix[i][j]);} printf("\n");} printf("\n"); for(j=COL-1;j>=0;j--){ for(i=0;i<ROW;i++){ printf("%2c ",matrix[i][j]);} printf("\n");} return 0; }
657 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 08:22:20 ] >>656 宿題スレへどうぞ
658 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 08:56:29 ] #include<stdio.h> #define ROW 8 /*縦*/ #define COL 8 /*横*/ void disp(int (*matrix)[ROW][COL], int revrow, int revcol) { int i,j,row,col; for (j = 0; j < COL; j++) { col = (revcol) ? COL - 1 - j : j; for (i = 0; i < ROW; i++) { row = (revrow) ? ROW - 1 - i : i; printf("%c ", (*matrix)[row][col]); } printf("\n"); } } int main(void){ int matrix[ROW][COL] ={ {'#','*','*','*','*','*','*','*'}, {'#','*','*','*','*','*','*','*'}, {'#','*','*','*','*','*','*','*'}, {'#','*','*','*','*','*','*','*'}, {'#','*','*','*','*','*','*','*'}, {'#','*','*','*','*','*','*','*'}, {'#','*','*','*','*','*','*','*'}, {'#','#','#','#','#','#','#','#'}}; disp(&matrix, 1, 0); printf("\n"); disp(&matrix, 1, 1); printf("\n"); disp(&matrix, 0, 1); return 0; }
659 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 09:20:59 ] c初心者です。 以下の二つの関数はまったく同じように動きますか? int f1(int a) { if(a==3){ return 1;}; if(a>1){ return 2;}; return 3; } int f2(int a) { if (a==3) { return 1;} else if (a>1) { return 2;} else {return 3;}; }
660 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 09:24:27 ] 実行してみればいいじゃん
661 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 09:39:24 ] >>659 動きます。
662 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 10:12:28 ] 春休みが終わりそうで、カツオ状態だから、このありさま?
663 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 11:36:16 ] >>662 春休みに宿題なんかないだろ。
664 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 11:36:47 ] あるよ
665 名前:デフォルトの名無しさん [2009/04/02(木) 14:33:24 ] LinuxでC++で書いたクラスをまとめて、sharedライブラリ作ろうとおもってるんですが ヘッダファイルは、まとめたり、きれいにできませんか? 公開したいクラスは1つだけ(class A)です。実装はライブラリファイルひとつになります。 内部でたくさんのクラスを使ってるんですがこれらは外からは直接 使いません。 で、class Aのメンバにたくさんの他のクラスのオブジェクトがあったり、使ったり しているので、 class AのヘッダファイルA.hには内部のクラスたちを定義した たくさんの *.h がincludeされてます。 ライブラリを他人につかってもらうとき、ライブラリ1つと、ヘッダたっくさん になっちゃうんです。ひとつのヘッダファイルにまとめる方法ないです?
666 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 14:57:10 ] >>665 ひつの手だが、privateメンバにはダミー宣言を使う方法がある 例えば下の例(ヘッダ)で LIBをビルドする時だけ _LIB_MAIN_ を定義する こうすれば、LIB利用者には aaa.h は渡さなくて良い #ifdef _LIB_MAIN_ #include "aaa.h" aaa *a; #else void *a; #endif
667 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 16:46:14 ] それをいかに容量上限を感じさせないようにプログラムさすのがプログラマの役割だろ、常識的に考えて
668 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 16:52:42 ] 誤爆
669 名前:665 [2009/04/02(木) 17:33:37 ] >> 666 なるほど。いただき。 ポインタじゃなきゃだめ?サイズが合えばよい?
670 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 17:46:27 ] どんなクラスなのか分からんが、そもそもポインタ型にするなら、ヘッダからヘッダをインクルードする必要はないよ。 前方宣言だけで済む。
671 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 17:51:49 ] >>668 できるよ。 以上。 はい次の方。
672 名前:665 [2009/04/02(木) 18:04:13 ] >>670 そか。 全部ポインタにして、前方宣言すればすればよいのね。 ポインタじゃないとやっぱりむり?
673 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 18:10:08 ] >>672 参照でも可能だけど、まあ同じ話だね。 普通の変数の形で持つなら、その変数の型の完全な定義が必要になる。ポインタや参照なら不要。
674 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 18:31:47 ] Aのポインタだけメンバに持つ公開用のクラスでも作ればいいんじゃ まぁ要するにpimplなんだが
675 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 21:44:13 ] pthreads関数を使用してその環境で一番処理が早いスレッド数に自動的にあわせるプログラムを作っているのですが、 すべてのスレッド内の一秒間にループした回数の和を取得することができません。 どうすればうまくできるでしょうか。
676 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 21:59:41 ] 一番簡単なのはグローバル変数に格納する事。 2番目はクラスにしてメソッドで各スレッド内で足したものを返す。かなぁ??
677 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 23:20:48 ] >>675 pthread_joinで戻り値(第2引数)を合計すればいい。
678 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 05:06:12 ] #include<stdio.h> int main(void){ int a,s,i; int box[10]={0}; scanf("%d",&s); while(s!=0){ for(i=0;i<s;i++){ scanf("%d",&a); if(a<=9) box[0]+=1; else if(9<=a&&a<20) box[1]+=1; else if(29<a&&a<40) box[3]+=1; else if(19<a&&a<30) box[2]+=1; else if(39<a&&a<50) box[4]+=1; else if(49<a&&a<60) box[5]+=1; else box[6]+=1; } } printf("%d\n",box[0]); printf("%d\n",box[1]); printf("%d\n",box[2]); printf("%d\n",box[3]); printf("%d\n",box[4]); printf("%d\n",box[5]); printf("%d\n",box[6]); } return 0; } 上のソースをユーザ定義関数を使って書きたいときはどうしたらいいのでしょう?
679 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 05:21:41 ] mainの中身をそっくり自分の関数に移動して、mainでそいつを呼ぶ。
680 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 08:00:22 ] #include<stdio.h> int hantei(int i) { if (i < 0) { return 0; } if (60 <= i) { return 6; } return i / 10; } int main(void){ int a,s,i; int box[10]={0}; scanf("%d",&s); for(i=0;i<s;i++){ scanf("%d",&a); box[hantei(a)]++; } for(i=0;i<=6;i++){ printf("%d %d\n",i,box[i]); } return 0; }
681 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 21:50:25 ] 他の板でこんな言葉を叩きつけられました プログラマになりたくてなるんじゃないなってしまう者がプログラマ 貧弱一般人がプログラマになろうとしても人工的に淘汰されるのが目に見えている この言葉にはすごく説得力があるような気がします やはり、プログラマになろうとしている僕に、プログラマなんて無理なんでしょうか?
682 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 21:57:21 ] 向き不向きは有るかもしれないが、やりたい人は誰でもなれる。 向かない人はやりたいと思わない。
683 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 22:02:29 ] ブロントネタに真剣にならなくても
684 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 22:28:30 ] >>682 ありがとうございます。 頑張ってみようと思います
685 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 22:41:26 ] 0b00000001とかしたらサフィックスが無効ですってエラーでるんだけど、何で?
686 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 22:42:12 ] サフィックスが無効だからです。
687 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 22:44:30 ] プログラマはがんばっちゃう人はダメなんだよ。 プログラマの三つの美徳 怠惰であれ、短気であれ、コーマン大好きであれ 海軍式の努力と根性がまかり通っている職場や そのような空気を当たり前とみなすSE/PGによるプロジェクトは 漏れなくデスマーチになる。
688 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 23:37:25 ] >>685 2進リテラルは無い。 8進数なのにbが入ってて不正じゃないかい?
689 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 01:24:45 ] 0bはたしかgcc独自拡張で存在したと思う。 使わないほうが無難だな。
690 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 10:38:18 ] >>681 他の板ってこれか? プログラミング質問すれ Part1 pc12.2ch.net/test/read.cgi/unix/1127388574/474
691 名前:デフォルトの名無しさん [2009/04/04(土) 12:02:02 ] >>681 プログラマーに限った話じゃない。 全ての職業に言えること。
692 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 13:32:32 ] まぁ、私はプログラミングなら飯が食えると判断したからプログラマになったけどな。
693 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 13:42:21 ] すいません。 ポインタを使って、配列のそれぞれの要素に文字列を入れたんですけども、 こういう場合の配列のアドレスって一体どういう規則で並んでいるんでしょうか? #include <stdio.h> int main() { char test[] = "1234"; char *words[] = {"one","two","three","four"}; printf("%p %p %p %p\n",test[0],test[1],test[2],test[3]); printf("%x %x %x %x\n",words[0],words[1],words[2],words[3]); }
694 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 13:45:41 ] 雑魚ぷろぐらまあは手配師(人材派遣会社)に喰わせてやる(=喰われてやる)のが仕事だかんなあ
695 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 13:51:41 ] >>693 %xではなく、%pを使うべきじゃないだろか。 で、質問は"one", "two", "three", "four"がどう配置されているかってこと? だとしたら答えは「コンパイラのご機嫌次第」かな。 大抵は、その順番で8バイト境界に並べられるような気がするけど。
696 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 13:58:50 ] wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
697 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 14:06:43 ] FFFF0000 o n e \0 FFFF0004 t w o \0 FFFF0008 t h r e FFFF000C e \0 X X FFFF0010 f o u r FFFF0014 \0 X X X ※ Xに何が入るか分からない words[0] = (char*)FFFF0000 words[1] = (char*)FFFF0004 words[2] = (char*)FFFF0008 words[3] = (char*)FFFF0010 こんなイメージ
698 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 14:12:56 ] >>695 なるほど。ありがとうございます。 >>697 ありがとうございます。
699 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 14:12:59 ] そのコードの前にconst char * foo = "one and two";なんてコードがあったら面白いことになりそうだ。
700 名前:デフォルトの名無しさん [2009/04/04(土) 14:20:39 ] VC++2008EE使用 これでエラーが出るんですが、どこが悪いんでしょうか? #include <stdio.h> #include <stdlib.h> #include <string.h> main() { char str[100] ; int num ; gets_s(str) ; num = atoi(str) ; printf("%d",num*2) ; }
701 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 14:29:28 ] >>700 エラーの対処を人に聞く場合はエラーの詳細を書け たぶん、get_s には2番目のパラメタとして長さが必要ではないかと思うけど
702 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 14:35:20 ] gets_s(str, sizeof(str)); だろうね mainの最後にreturn 0;も忘れずに
703 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 14:37:13 ] なあに、この程度のソースならエスパーでなくとも どんなエラーか想像がつくってもんさ
704 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 14:57:29 ] >>701-703 ありがとうございます。 コンパイル通りました。
705 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 15:41:42 ] >>704 C/C++はコンパイル通っただけじゃまっっっっったく安心できない言語だから気をつけな。 むしろコンパイル通らない内が楽だよ。(コンパイラがミスを見つけてくれるから) コンパイル通ってからのデバッグが大変なんだよねぇ。
706 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 16:38:04 ] それって言語として問題あるんじゃない?
707 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 16:50:40 ] アホは黙ってていいよ
708 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 16:51:37 ] >>706 何を今更。 そんな欠陥があっても、便利なとこがあることに変わりはないから使うというだけのこと。
709 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 17:20:12 ] インタプリタ言語なんてすべて実行時エラーだから もっと恐ろしいことに。
710 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 18:52:37 ] >>705 が言ってる事(>コンパイル通ってからのデバッグが大変なんだよねぇ。)は 別に言語の欠陥じゃないだろ。 プログラムを作る →期待通りに動作していない →何がいけないんだーー? ってなるのはどの言語でも一緒だろ。
711 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 18:55:30 ] ロジックエラーってやつだな。
712 名前:710 mailto:sage [2009/04/04(土) 19:07:42 ] >>711 俺の頭のエラーってことだな。ホント質わるい。
713 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 19:12:44 ] 誰も頭の話なんてしてないが。。。
714 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 19:23:10 ] 初心者が読むc++のお勧め教えてください お願いします。
715 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 19:34:48 ] >>714 入門者かな?これからC++始めたいって人? 入門者ならエクスメディアの『ビジュアルラーニングC++』って本が個人的なオススメだったけど、会社が倒産した。
716 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 21:51:20 ] >>715 ありがとうございます
717 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 21:53:53 ] コロッとだまされちゃうんだな。
718 名前:715 mailto:sage [2009/04/04(土) 22:26:09 ] >>717 失敬な
719 名前:デフォルトの名無しさん [2009/04/05(日) 00:27:14 ] すんません。知り合いのフリーのPGがVBやVCのアカデミック版使って 作ったソフトを売ってるんだが、ソフト自体は差は無いのですか? やめたほうがいいんじゃって言っても「ばれねぇ」の一点張り。 実際どうなの?
720 名前:デフォルトの名無しさん [2009/04/05(日) 00:30:31 ] 何か問題あるの?
721 名前:デフォルトの名無しさん [2009/04/05(日) 00:37:52 ] アカデミック版で作ったソフトって売っていいの?
722 名前:デフォルトの名無しさん [2009/04/05(日) 00:38:20 ] 売っちゃいけないの?
723 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 00:39:42 ] ライセンス読まないの?
724 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 00:41:13 ] >>719 ライセンスキーの情報が埋め込まれてるから ばれる可能性はある アカデミックとかImagineCupのは商用利用負荷だよ Expressはできるけど
725 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 00:43:20 ] いやアカデミックは商用利用可能だよ
726 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 00:53:16 ] >>725 ほんとだ、ごめん アカデミックは大丈夫ですね
727 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 00:59:16 ] テンプレートの明示的特殊化の際に「整数型全部」「浮動小数点型全部」といったことをしたいんですが、いい方法はありませんでしょうか。 template<typename T> class Hoge { void f() {} } template<t> class Hoge<整数>::f { void f() {整数専用処理}; } みたいな感じで。
728 名前:デフォルトの名無しさん [2009/04/05(日) 01:00:39 ] じゃあ、学生のときに買ったアカデミックで作ったソフトは売っても全く問題ないわけね
729 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 01:00:49 ] もうひとつ。 テンプレートの明示的特殊化はヘッダファイルに書いておいてもいいものなのでしょうか。
730 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 01:28:00 ] >>727 boost::enable_ifを使うしか無いと思うよ。 letsboost::enable_if www.kmonos.net/alang/boost/classes/enable_if.html
731 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 01:38:48 ] >>730 ありがとうございました。boostの使用も考えてみます。 テンプレートの明示的特殊化を複数個所で使用する場合に、 実体を置くべき場所の解決がうまくできない問題は相変わらず…… externを使えば?とも思いましたが、BCCでもVCでも解決できませんでした。
732 名前:730 mailto:sage [2009/04/05(日) 01:51:31 ] >>731 まあ正直俺だったらboost::enable_ifじゃなくて、 適当なprivateインライン関数テンプレートfoo_temp()を1つ別個に用意しておいて、 int, short, unsigned long, etc... を全部考え得る限り特殊化し、それぞれから foo_temp<int>, foo_temp<short>とかを呼び出すように定義しちゃうかもしれない。
733 名前:730 mailto:sage [2009/04/05(日) 01:54:10 ] >>731 >>テンプレートの明示的特殊化を複数個所で使用する場合 そもそも明示的特殊化って何? ふつーに特殊化だよね? あと、メンバ関数テンプレートの話だよね? 実体をどこに書いてる? 特殊化してなければちゃんとコンパイル→リンクまで行くの?
734 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 02:19:10 ] >>733 「明示的特殊化」はIBM XL C/C++ ランゲージ・リファレンスの言葉に従っています。 中身は普通の特殊化でメンバ関数です。 やりたいことはクラステンプレート内部のメンバ関数のみの特殊化です。 (クラス内部のテンプレート関数の特殊化を指す名前はあるのでしょうか?) 現在は hoge.h hoge.cpp a.cpp b.cpp があるとして、 // hoge.h template<typename T> class Hoge { void f() {} } // template<> class Hoge<int>::f() { int専用処理; } // cppでの記述を消しても多重定義、NG // template<> class Hoge<int>::f(); // VCとBCCではじかれる。externを書いても同じ。 // hoge.cpp template<> class Hoge<int>::f { void f() {int専用処理}; } // a.cppとb.cpp Hoge<int> hoge; hoge.f(); とおいて試してみています。
735 名前:デフォルトの名無しさん [2009/04/05(日) 02:56:13 ] >>728 学生じゃなくなってもアカデミックを使い続けて良いの?
736 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 03:40:33 ] 課題やる→コンパイルエラー→シコシコ直す→コンパイル通る→やったー!これで終わりだー →./a.out→文字がうじゃうじゃうじゃうじゃうじゃうじゃうじゃうじゃorセグメンテーション・エラー云々 →( ゚д゚) →( ゚д) そうだね、今このときだね
737 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 03:41:41 ] おれはなんて遅レスをしていたんだ・・・・・・ 恥ずかしい・・・・・・っ、でも、
738 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 04:36:19 ] >// hoge.cpp >template<> class Hoge<int>::f { void f() {int専用処理}; } template どうこう以前に、すでに書き方間違ってるじゃろ、それ。 あと、特化したのはクラスであってメンバ関数じゃないんだから 特化のための宣言である template<> もいらない。
739 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 04:56:41 ] >>738 失礼しました。その部分はclass→voidですね。classだとそもそもコンパイルが通らないはず。 というわけで試してみました。 // hoge.h template<typename T> class Hoge { void f() {} } // なにも書かない→gcc3.4:リンカで多重定義 VC9:通るがcppでの実装は無視される BCC:cppのコンパイル時に多重定義扱い // void Hoge<int>::f; //gcc3.4→too few template-parameter-list VC9:通るがcppでの実相は無視される BCC5.5:template<>宣言が必要 // hoge.cpp void Hoge<int>::f { void f() {int専用処理}; } といった感じです。
740 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 05:11:32 ] template<> class Hoge<int>::f(); テンプレートクラスの特化宣言をなぜ落とすw テンプレートクラスの特化はちゃんと宣言する必要がある。 それが目的なんだから。 特化宣言がいらないのはそのクラスのメンバ関数。 なぜなら特化したのはクラスであってメンバ関数じゃないから。 仕様書を読んだほうがいいかも。
741 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 05:50:37 ] >>740 メンバが多めのテンプレートクラスの一つの関数だけを再定義、といった場合に、 教科書通りにテンプレートクラスの特化で全メンバを再定義すればいけるというのは分かるのですが、 特化したテンプレートクラスのある特定の関数だけリンカで特殊な定義に差し替えられないかと考えたのですが、 冷静に考えるとそれをコンパイラに知らせるのはかなり酷な作業の気がしてきたので、 教科書通りに全部再定義してみます。 一足飛びに変な質問をしようとして、エスパーさせてしまってすみません。
742 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 07:10:08 ] 4桁の2進数があったとします。0001←2進数表記 それを0001→0010→0100→1000→0001→…という感じでずっと1を移動させたいん ですがifやforなど条件分岐を使わず出来るだけ軽い処理でいい方法ありませんか? この関数が呼び出されるたびに上記のように1を移動させていくって感じです。 <<=1でシフトさせていけば軽いしいいかなと思ったんですがそれだと1000を処理したとき 0000になってしまいます。やっぱりif入れて8より大きくなったら1にとかしかない?
743 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 07:14:21 ] (x << 1 ) & (x >> 3)
744 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 10:36:51 ] 初心者はポインタより多重ループのほうが躓きやすくない?
745 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 11:10:02 ] ポインタや多重ループより「躓き」の読み方の方が難しい
746 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 13:19:05 ] >>743 m9(^Д^)
747 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 13:28:50 ] x = ((x & 7) << 1) & (x >> 3)
748 名前:デフォルトの名無しさん [2009/04/05(日) 14:00:12 ] x = 0; x = (x << 1) & 16 || x = 1;
749 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 14:18:49 ] >>748 右辺値への代入?
750 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 14:40:38 ] || は副作用完了店だお
751 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 14:42:06 ] 15じゃない?
752 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 14:54:35 ] #include <stdio.h> void main() { int i, x = 1; for (i = 0; i < 10; i++) { printf("%d:%X ", i, x); x = ((x & 7) << 1) | (x >> 3); } } 0:1 1:2 2:4 3:8 4:1 5:2 6:4 7:8 8:1 9:2
753 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 14:57:43 ] x = ((x + x) >> (x & 4))& 15
754 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 15:02:39 ] >>752 7とか中途半端だなどうせなら非環境依存にしとけよ
755 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 15:17:34 ] >>745 躓きの「書き」を問われたら俺失点するわ。
756 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 15:25:45 ] 簡単な文字だから今覚えてしまえば、死ぬまで忘れないだろ
757 名前:デフォルトの名無しさん [2009/04/05(日) 15:29:31 ] >>751 15だ。ごめん。
758 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 15:42:21 ] 「躓き」覚えた 3日も経てば忘れるだろうけど
759 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 16:30:25 ] そもそも何で足偏に質なんだ? どの辺がつまづきなんだろう・・・。
760 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 16:32:17 ] x=^((x<<1)+1);
761 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 16:58:46 ] x = 1<<(((S++)%4)+1) ??
762 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 13:27:16 ] 図書館でC++の本探そうかと考えてるんですが・・ 図書館にあると思いますか?(・∀・)
763 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 13:32:26 ] うちの近所の図書館にはある
764 名前: ◆xb8eIST5.k mailto:sage [2009/04/06(月) 13:50:42 ] そうですか!また行こうと思います(・∀・) ところで、誰かモリタポ別けてもらえないでしょうか(・∀・ ) ◆xb8eIST5.k
765 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 14:20:47 ] >>764 お前、厨房か?クレクレやろうは逝ってよしだ、ゴルァ
766 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 14:39:11 ] 小学校の図書館とか、児童施設の図書コーナーとか、特定の分野に特化した図書館とかじゃなきゃ 数冊はあるんでねーの?
767 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 14:58:49 ] >>764 住所晒したら着払いで送ってやんよ
768 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 15:28:31 ] >>767 着払いでモリタポを送る!?(・∀・)
769 名前:デフォルトの名無しさん [2009/04/06(月) 18:42:31 ] mogera.jp/gameplay?gid=gm0000000129 そんなことより exe が使用しているdllを調べるソフトってなんだったっけ?
770 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 18:43:45 ] Dependency Walker(Depends.exe)のことか
771 名前:デフォルトの名無しさん [2009/04/06(月) 18:53:32 ] Linuxでデバイスとのやりとり(シリアル通信)をラップするような ライブラリを提供したいです。C++。 ユーザにはどんなインターフェイスで公開するとよいですか? 受信スレッドでデバイスから読んで 受信バッファにデータ積んで、コールバック登録されたメソッドを 呼び出してあげる。でよいですか? ユーザアプリ側のコールバックルーチンが別スレッドで走るのが 気持ち悪い気がするのですが。
772 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 19:09:29 ] Windowsでプロセス間通信)をラップするような ライブラリを提供したいです。C++。 ユーザにはどんなインターフェイスで公開するとよいですか? 受信スレッドでプロセスから読んで 受信バッファにデータ積んで、コールバック登録されたメソッドを 呼び出してあげる。でよいですか? ユーザアプリ側のコールバックルーチンが別スレッドで走るのが 気持ち悪い気がするのですが。
773 名前:771 [2009/04/06(月) 19:42:26 ] >>772 Windowsのプロセス間通信なら、 共有メモリと、Windows Messageを使うと、ユーザアプリに求めるのは メッセージポンプだけになるし、ほぼ標準的なつくりになる気がするので、 好みなんですが。 Linuxではどうですか?
774 名前:771 [2009/04/06(月) 19:45:43 ] Named pipeは、よく使われますか? ユーザアプリは、selectで待つようになるんですよね。
775 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 10:59:32 ] 自作ソフトで使うマクロの文法を、拡張しようと思い、 lexやらyaccやらbisonやら調べ始めたのですが・・・ 難しい・・・ 例えば呼び出し前に新たなトークンを追加したり、関数定義みたいなことが 出来るようにするサンプルを探しているのですが、見つかりません。 ・自作ソフトはプラグインで拡張可能になっていて、マクロのプラグイン名 を自前で解析していますが、区切り文字の検出とか括弧の扱いとか、自力 では限界なので・・・プラグイン名を追加トークンにして、ライブラリお 任せ一発という形に出来ればと思っています。 ・マクロの中で関数マクロの定義が出来るようにといいのですが、 hoge(a, b, c) = { age; sage(a, b); uge(c); } hoge(1, 2, 3); こういうのを実現しているサンプルなどありましたら教えてください。
776 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 11:43:07 ] >>775 こっちのスレのほうが適当かな。 pc12.2ch.net/test/read.cgi/tech/1233143342/
777 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 12:56:10 ] >>776 ありがとうございます。行ってきます。
778 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 13:22:03 ] 初歩的な質問で申し訳ないんですが みなさんは童貞でしょうか?
779 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 13:29:35 ] どっちか一方しか居ないとでも思ってんだろうか。
780 名前:デフォルトの名無しさん [2009/04/07(火) 13:53:49 ] フォームの中にサブフォーム?を作ってメニューのボタンを押すたびにそのサブフォームの内容を変えるようにしたいのですが どうすればよろしいのでしょうか?
781 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 13:54:39 ] いきなりフォームとか言われても環境がわからんわ どのフォーム?
782 名前:デフォルトの名無しさん [2009/04/07(火) 14:02:03 ] えっとWindowsフォームでしょうか・・VisualC++使っています
783 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 14:03:59 ] >いきなりフォーム ヴビ厨特有の現象です。 >サブフォーム? このオレ用語も。 …ほらね、俺に ESP 能力なんかないでしょ。 >>780 C++/CLI なら TabControl でも使っとけ。
784 名前:デフォルトの名無しさん [2009/04/07(火) 14:17:05 ] すみませんでした。 ありがとうございました。
785 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 19:30:35 ] >>779 どちらでもない、あるいは両方ってあり得るの?
786 名前:デフォルトの名無しさん [2009/04/07(火) 19:40:47 ] >>785 「みなさんは」という集合なんだから両方は余裕であるだろ
787 名前:デフォルトの名無しさん [2009/04/07(火) 20:29:33 ] >>786 はい、残念。 「童貞」は個体の属性だから、>>778 は集合に対する問いかけじゃない。 集合の元に対する問いかけだ。 日本語勉強してから出直しな。
788 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 20:32:21 ] >>787 数学できるのかっこいー ってお世辞言ってもらえるとでも思っているのかな? ・・・恥さらしてないで出直しな。
789 名前:デフォルトの名無しさん [2009/04/07(火) 21:08:12 ] できて当たり前のことをほめられてもうれしくないだろ 788が恥さらしだということだけは確実に真理だ
790 名前:788 mailto:sage [2009/04/07(火) 21:54:35 ] >>789 >「確実に真理だ」 ・・・顔 真っ赤にしちゃってかわいー
791 名前:デフォルトの名無しさん [2009/04/07(火) 22:01:26 ] >>790 定番のレスしか返せないってほんとかっわいいいいwwwwww
792 名前:790 mailto:sage [2009/04/07(火) 22:12:06 ] >>791 あきらめろ。 このありさまではもう、誰が見てもお前が○け犬
793 名前:デフォルトの名無しさん [2009/04/07(火) 22:26:27 ] >>788 数学?
794 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 00:38:22 ] >>787 「童貞」は数学用語じゃないから勝手に元と認識してはいけません
795 名前:デフォルトの名無しさん [2009/04/08(水) 00:39:57 ] 集合とか言い出したのは>>786 なのだが。
796 名前:デフォルトの名無しさん [2009/04/08(水) 01:02:41 ] >>787 童貞乙
797 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 07:03:13 ] 童貞が煽りになると思う時点でガキすぎるw
798 名前:デフォルトの名無しさん [2009/04/08(水) 07:07:20 ] 本当に童貞の奴が必死ですw
799 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 09:32:35 ] >>787 >「童貞」は個体の属性 を不特定多数に対して問いかける間抜けさに気付けない頭の悪さを棚に上げて >日本語勉強してから出直しな。 てのが、なんだかカッコイイですね。
800 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 11:16:42 ] 元レスの奴と違う人間に煽られて反応したお前が負け犬だwwwww
801 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 13:54:40 ] >>800 違うか同じかは知らんが (よく解るなお前)、そんなことより その「お前」ってのは誰?
802 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 13:55:58 ] オレオレ
803 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 14:04:13 ] いーや俺。
804 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 14:18:26 ] うんお前
805 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 15:11:57 ] 初心者なんですが、質問させてください。 まず、BCCの無料版をDLして、メモ帳のソースをcファイルで保存しました。 それからコマンドプロンプトを使って実行しましたが、次の文章が出てexeファイルができませんでした。 'bcc32'は内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチファイルとして 認識されていません。 そして、ソースは以下のものです。 main() { }
806 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 15:15:41 ] >>805 BCCへのパス通したか? ttp://pocketstudio.jp/win/xp/path.html
807 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 15:16:09 ] パスが通ってない。通せ
808 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 15:21:52 ] パス通せよ
809 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 15:26:41 ] ttp://www.cppdrive.jp/bcc/install/ ここで勉強しる
810 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 15:39:14 ] >>806-809 やってませんでした。ありがとうございます。やってみます。
811 名前:デフォルトの名無しさん [2009/04/08(水) 17:57:14 ] select関数の第一引数について TCP/IPのソケット通信処理を作成していて、select関数を使用するつもりです。 select関数の第一引数には「集合にある記述子の中の最大値に1を足したもの」 を設定するということですが、具体的に何を設定すればよいか分かりません。 以下の場合、第一引数"nSocket"には何を設定すればよいのか教えて下さい。 FD_ZERO(&rd); FD_SET(acceptSocket1, &rd); FD_SET(acceptSocket2, &rd); select(nSocket, &rd, NULL, NULL, 10); よろしくお願いします。
812 名前:デフォルトの名無しさん [2009/04/08(水) 18:03:41 ] select()に登録するソケット(=socket()の戻り値)の中で一番大きい奴に+1した値 socket()の戻り値はint型だから比較したり+1したりできるでしょ?
813 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 18:08:20 ] >>812 そういう意味ですか。 ありがとうございました。
814 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 18:16:27 ] ttp://hpcgi1.nifty.com/MADIA/Vcbbs/wwwlng.cgi?print+200704/07040016.txt nfds 引数は Windows Socket では未使用 (無視される) Windowsのソケットはいろいろ癖がある
815 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 23:17:45 ] クラスの継承時にコンストラクタも継承するというか、 親クラスに定義されているコンストラクタをそのまま使う方法というのは、 再定義してデフォルト初期化子に渡す以外ないのでしょうか。
816 名前:デフォルトの名無しさん [2009/04/08(水) 23:32:54 ] class A { int m_val; public: A(int a, int b){ m_val = a+b; } } class B : A {} B(1, 2); みたいにしたいってこと?再定義しかないね。
817 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 23:41:25 ] >>816 了解しました テンプレートで class A { int m_val; public: A(int a, int b){ m_val = a+b; } } template<class X> class B : public A { ... } のようにして、定型の追加機能を持たせるテンプレートを作ろうとしたのですが、 どうしてもそこで引っかかってしまいまして。
818 名前:デフォルトの名無しさん [2009/04/09(木) 02:04:45 ] とりあえず 童貞乙 であります!