- 1 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 23:15:45 ]
- エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.70【環境依存OK】 pc12.2ch.net/test/read.cgi/tech/1258873470/ 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm codepad.org/ (コンパイルもできるし出力結果も得られるのでお勧め) ◆ソースのインデントについて 半角空白やTABでのインデントはスレに貼ると無くなります。 そのため、アップローダーに上げるのも手ですが直接貼る場合は、 全角空白か に置換すると見栄えだけはよくなります。
- 445 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 21:45:41 ]
- >>444
C#で不幸になるやつは、もともと不幸なやつだけだ。
- 446 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 23:14:59 ]
- C#は.NETで出来ないことしようとすると、途端に不幸になる気がする。
MFCだと、のっけから不幸にだが・・・
- 447 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 23:27:06 ]
- ぶっちゃけCから始めるのがいいよ
C99ならC++の便利なところは大体使えるし
- 448 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 00:06:35 ]
- Cを覚えてenumや構造体や関数で取り敢えずなんとか実用になるライブラリとか書く。
しかしC++でnamespaceやクラスを知ると、それまで書いたのを全部書き直したくなるんだよ。 で、書き直した頃にtemplateに手を出して、また書き直したくなるわけ。 その後もSTLやらEffectiveC++やらBoostやらにかぶれるたびに、今まで書いたものがゴミに見える。 さらにC++0.xなんてので、今また過去の糞化現象が起こるんです。
- 449 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 00:11:09 ]
- それを楽しめるマゾ向け
- 450 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 00:14:47 ]
- 最近はもう逆に余計なものみんな取り払って++も付かない99でもないCだけでいいんじゃないかと思えてきた
- 451 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 00:15:35 ]
- 99より前にもいくつかあるんだが
- 452 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 00:18:56 ]
- shop99 と shop100 だと500円の買い物で
5円とか半端な数字出る出ないの違いが有るよね
- 453 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 05:48:56 ]
- 入門書とかで「解説のためにわざと非効率なコード書いてます」とか出ると混乱するよな。
- 454 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 10:02:18 ]
- >>447
C99に完全準拠しているコンパイラはIntel C++などごく一部だけだぞ g++も部分準拠だし移植性がないしだいたいg++はC++0xへの改訂作業で 手一杯で今は時代遅れのC99に携わっている暇はないだろう
- 455 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 10:07:15 ]
- C++0xへの改訂作業なんて、
考えるだけで頭痛くなってくるなww
- 456 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 10:11:50 ]
- C99への準拠を強化するよかまだ0xに力入れた方がマシということ
- 457 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 10:11:59 ]
- でもnullptrとdecltype、auto、右辺値参照、コンテナの初期化子
など痒い所に手が届くようになるのはありがたいよな
- 458 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 11:36:08 ]
- 今までが届かなさすぎだったんだよ!
- 459 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 12:53:10 ]
- /usr/include/を見ていたら、*.hと*.cppがありました
*.cppには#include "*.h"としか書いてありません 一体何がしたいんですか?
- 460 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 12:57:27 ]
- >>459 知るか。書いた奴に聞けよ。
- 461 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 15:00:38 ]
- イテレータから元の変数にアクセスできますか。
vector<int>::iterator p;だと、配列要素の値と位置がわかるだけ気がしますが pの前方に要素追加したり削除したりとか。
- 462 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 15:04:23 ]
- >>461
「元の変数」って何? vector インスタンスのことなら、無理。
- 463 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 15:06:31 ]
- サンクス
- 464 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 15:24:40 ]
- スタティックリンクライブラリ作成についての質問なんですが
1.C言語でも扱えるようにAPIの引数や戻り値部分だけあわせておけば 内部でC++で書いていようが問題はない? 2.スタティックリンクライブラリをコンパイルする際にスタティックリンクライブラリが 利用する外部の機能を取り込まないようにするにはどうすればいいですか? (VC++2008
- 465 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 15:33:30 ]
- 親クラスを継承して子クラスを作るときには、
子クラスのヘッダファイルにもオーバーライドするメソッドを、定義しないとダメなんですか? 一応自分でも試してみたんですが、コンパイラ様に怒られたので
- 466 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 15:35:30 ]
- >>465
そんなことはない。 エラーメッセージは?できればソースも出して。
- 467 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 15:36:57 ]
- 純粋仮想関数を持つ親クラスを継承した子クラスをインスタンスとして使おうとしたとか?
- 468 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 15:38:57 ]
- >>465
あとメソッドっていう用語は存在しないので、 今後はメンバ関数member functionと 呼ぶようにしなさいね。
- 469 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 15:42:06 ]
- >>464
1は、extern "C"もつければおk 2は、「取り込まない」の意味が微妙。 作ってるライブラリをAとして、 AはBというライブラリを使用しているとき、 AにBを含ませたくないという意味? 特殊なことしなければ「取り込まない」状態だと思う。 Aのプロジェクトの中にBのlibファイルを追加すれば 「取り込む」状態になるけど。
- 470 名前:465 mailto:sage [2010/02/14(日) 15:48:08 ]
- ひとまず、ヘッダファイルだけ晒します
class Super{ public: Super(); virtual void print(); ~Super(); }; class Sub : public Super{ public: Sub(); void print(); ~Sub(); }; エラー ${HOME}/Test/sub.cpp:8: error: no ‘void Sub::print()’ member function declared in class ‘Sub’
- 471 名前:デフォルトの名無しさん [2010/02/14(日) 15:57:10 ]
- Visal C++ 2008 ExpレッsEditionでWindowsXP向けの開発です。
ウィンドウごとに音量を調整、若しくは開いているフラッシュオブジェクトの音量を調整する関数 または手法は無いでしょうか?
- 472 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 16:16:59 ]
- イテレータは挿入しても保たれるけど、end()とbegin()はそうでないのね。
不便。何でこんな事にしたの。
- 473 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 16:24:09 ]
- >>472
??保たれない場合もあるだろ。何を言いたいのかよく分からんぞ。
- 474 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 16:28:15 ]
- そうなのか。気をつける。
- 475 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 16:41:04 ]
- 何が保たれるんだ?
- 476 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 16:42:04 ]
- *.cppに直接宣言している変数って何なんですか?
- 477 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 16:44:46 ]
- どんなコード?
- 478 名前:476 mailto:sage [2010/02/14(日) 16:48:30 ]
- >>477
こんなコードです DownloadManager *BrowserApplication::s_downloadManager = 0; HistoryManager *BrowserApplication::s_historyManager = 0; NetworkAccessManager *BrowserApplication::s_networkAccessManager = 0;
- 479 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 16:53:36 ]
- googleのコード検索で見たけど
グローバル変数だね
- 480 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 16:57:51 ]
- prefix の s_ はstatic変数のsを表しているのかもしれない
- 481 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 16:58:43 ]
- >>478
staticのメンバ変数は、どっかに実体を宣言しないといけない。
- 482 名前:479 mailto:sage [2010/02/14(日) 17:01:50 ]
- そうだったw
479は間違い
- 483 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 17:04:26 ]
- boost::tuples or tuple
の使い方が分かる日本語のサイトを教えてください。 名前空間が boost::tuplesなのかboost::tupleなのか、 色々混ざっているようなので ググっても謎です。 現行仕様のboost.タプルのの使い方が分かる日本語のサイトを教えてください。 よろしくお願い申し上げます。
- 484 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 17:05:53 ]
- アキラさんのboost本買うといいよ
- 485 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 17:18:10 ]
- テンプレート本?
- 486 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 17:41:35 ]
- >>483
boost.cppll.jp/HEAD/libs/tuple/doc/tuple_users_guide.html
- 487 名前:483 mailto:sage [2010/02/14(日) 17:49:05 ]
- >>486
お返事ありがとうございます。 拝読致します。
- 488 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 18:41:11 ]
- >>481
ありがとう
- 489 名前:デフォルトの名無しさん [2010/02/14(日) 19:06:37 ]
- C++なのですが
1行目 n個、2行目(n-1)個、・・・、n行目 1個の配列をつくるコードって これであっているのかどうかチェックしていただきたいのですが どうでしょう? --------------------------- int **a = new int*[N]; a[0] = new int[(int)(N * (N + 1) /2)]; int j = N; for(int i=1; i<N; i++){ a[i] = a[0] + i * (j-1); j--; } delete[] a[0]; delete[] a; ---------------------------
- 490 名前:デフォルトの名無しさん [2010/02/14(日) 19:10:50 ]
- CやC++を今から勉強したいんですけど、
全くの初心者ですがオススメの本ってありますか? 将来仕事にすることも考えてます。
- 491 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 19:14:57 ]
- >>490
独習シリーズ 本屋に行って、黄色い分厚い本を買って頭からケツまで20回嫁。
- 492 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 19:19:28 ]
- >>489
ありとあらゆる意味でダメ。 期待したとおりに動かないし、(直したとして)保守性も最悪。 窓からソースを投げ捨てるレベル。
- 493 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 19:20:11 ]
- ワロタw
- 494 名前:デフォルトの名無しさん [2010/02/14(日) 19:20:53 ]
- >>491
ありがとうございます 明日にでも買ってこようと思います
- 495 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 19:23:33 ]
- >>489
動くのかもしれんけどなんかおかしいような 普通はこんな感じじゃない? とかいって、普段vectorばっか使ってるから 初めてこういうコードを書いたわけだが int n=10; int **a=new int*[n]; for(int i=0;i<n;++i){ a[i]=new int[n-i]; for(int j=0;j<n-i;++j){a[i][j]=j;} } for(int i=0;i<n;++i){ for(int j=0;j<n-i;++j){ cout << a[i][j]; } cout << endl; } for(int i=0;i<n;++i) delete[] a[i]; delete[] a;
- 496 名前:デフォルトの名無しさん [2010/02/14(日) 20:15:00 ]
- >>495
ちなみにvectorだったらどんな感じになるんですか?
- 497 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 20:30:02 ]
- >>495
元のコードって、領域が配列を跨いで連続してる必要があるんじゃないの?
- 498 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 21:17:12 ]
- >>496
std::vector<int> a[N]; for (int i = 0; i < N; ++i) { a[i].resize(N - i); }
- 499 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 21:31:18 ]
- ポインタ配列は愚行でしょ
struct C{size_t sz;int*p; C(size_t x):sz(x),p(new sz(int)){} C(size_t x,int*a):sz(x),p(a){}}; template<size_t N>struct L:C{ size_t am(size_t x){return x*N-((N+1)*N)/2;} L():C(am(N)){} C operator[](size_t x){return C(N-x+1,p+sz-am(x));}};
- 500 名前:デフォルトの名無しさん [2010/02/14(日) 21:37:35 ]
- >>497
そこが問題になるんですよね・・・ >>498 なるほど
- 501 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 22:41:14 ]
- 上でC99に準拠しているコンパイラが少ないって話が出ていたけど、
実際に試してみたら VC, gcc, bcc, dmc, OpenWatcom で全部ガン無視されててフイタwww むしろIntelの仕様がおかしいって言われそうで不憫だ。
- 502 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 22:45:10 ]
- gcc?
- 503 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 22:47:11 ]
- >>502
GNU C Compiler ですけど?
- 504 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 22:48:49 ]
- gnu compiler collection
- 505 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 22:53:13 ]
- gccじゃなくてg++じゃ、と>>502は言いたかったに1ペリカね。
- 506 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 22:54:05 ]
- こまけぇことはいいんだよ
- 507 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 22:54:26 ]
- >>504
その略称のこともあるけど、GNU C Compilerの名前としてもgccは使われる。 >>502 お前人の揚げ足取ろうとする嫌な性格のやつなのね? そのくらい分かることだろ? さらに言えば今回の文脈ではg++じゃなくてgccが正しい。
- 508 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 22:56:51 ]
- gccで全然問題ない
- 509 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 23:05:20 ]
- >>502
がフルボッコw
- 510 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 23:06:32 ]
- 俺は502じゃないが、-std=c99つけてもあかんの
あと関係ないけどGNU Compiler Collectionを指すときってGCCにするんじゃね
- 511 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 23:10:18 ]
- >>510
その略称のこともあるけど、GNU C Compilerの名前としてもgccは使われる。 さらに言えば今回の文脈ではg++じゃなくてgccが正しい。
- 512 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 23:11:56 ]
- >>510
> 俺は502じゃないが、-std=c99つけてもあかんの いやだれ一人としてダメなんて言ってないぞ?
- 513 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 23:12:37 ]
- >>499
大きな領域を一度に確保してからplacement newを発動するとか デストラクタが面倒臭い事になるけど
- 514 名前:507 mailto:sage [2010/02/14(日) 23:13:42 ]
- >>512
いや言ってるんじゃね?
- 515 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 23:13:48 ]
- GCCがC99ガン無視って事は無いな
- 516 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 23:14:45 ]
- どうみても>>499は愚行だと思うんだが
- 517 名前:502 mailto:sage [2010/02/14(日) 23:19:43 ]
- 俺の疑問は>>510の1行目が理由で>>515なのではないかということ。
ok?
- 518 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 23:21:18 ]
- お前ら全員いい加減にしようぜ
- 519 名前:499 mailto:sage [2010/02/14(日) 23:21:22 ]
- うん。適当に打ち過ぎて矛盾やイミフメイな所がいっぱいあったんだ。気付いた処なおしたよ
template<bool F=false>struct C{size_t sz;int*p; C(size_t x):sz(x),p(new int[sz]){} C(size_t x,int*a):sz(x),p(a){}}; typedef C<> E; template<size_t N>struct L:C{ size_t am(size_t x){return x*N-((N+1)*N)/2;} L():C<true>(am(N)){} E operator[](size_t x){return E(N-x+1,p+sz-am(x));}};
- 520 名前:483 mailto:sage [2010/02/14(日) 23:29:10 ]
- boost::tuple
勉強してきました。 感動しました。
- 521 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 23:30:29 ]
- > 広く使われている処理系でも、タプルのこの種の用途について
> 最適化をしくじるものが存在する(例えば bcc 5.5.1) > ことに注意されたい。 Boostに名指しされとるww
- 522 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 23:32:42 ]
- まあ普通にstd::pairの拡張版だと捉えているがな
- 523 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 23:34:19 ]
- bcc 5.5.1は今から見るとひでぇからな。
- 524 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 23:35:47 ]
- 仕方ねえよ
標準C++にできるだけ準拠しようとして精一杯で 最適化まで手が回らなかったんだろ
- 525 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 23:49:33 ]
- >>519
何がしたいのかわからん。 new した領域はいつ delete されるの? なんで std::vector 使わないの?
- 526 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 23:52:14 ]
- テンプレートについて教えて下さい。
下記のようなテンプレートクラスを書いたところ コンパイルエラーになってしまいます。 template <class T> class TestClass { public: TestClass(){}; ~TestClass(){}; struct SS { int a; char b; long c; T d; }; SS * TestCode(void); }; template <class T> TestClass<T>::SS * TestClass<T>::TestCode(void) { return NULL; } gccでコンパイルすると、 error: expected constructor, destructor, or type conversion before '*' token error: expected `;' before '*' token となります。 どこが悪いのでしょうか。 教えて下さい。 宜しくお願いします。
- 527 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 23:57:10 ]
- >>526 typename
- 528 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 23:58:27 ]
- >>527
ありがとうございます。 何か追記する必要がありますでしょうか?
- 529 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 23:58:31 ]
- >>526
typename TestClass<T>::SS* TestClass<T>::TestCode(void)
- 530 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 23:59:46 ]
- >>529
ありがとうございます。 コンパイル通りました。 なぜ、先頭に typename と入れる必要があるのでしょうか? 教えて下さい。 宜しくお願いします。
- 531 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 00:01:57 ]
- >>530 ja.lmgtfy.com/?q=template+typename
- 532 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 00:05:55 ]
- >>531
ありがとうございました。
- 533 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 00:07:47 ]
- >>531
こんなサイトがあるんだw >これは、質問を自分で調べずに質問する人のために、Google検索の便利さを伝えるものです!
- 534 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 02:17:13 ]
- C++を勉強中の初心者です
std::string Hoge(int Num) { std::string Data Data.clear(); 処理 return Data; } こういう関数があった場合Hoge関数の中で確保したstd::string Dataは C言語のころのmallocで確保された領域とどう違うのでしょうか? GCがあるような言語の場合参照が一定以下だと開放されるとかありますが C++はそういうのが無かったはずですし
- 535 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 02:22:07 ]
- Cでも構造体を返すことが出来るのは当然知ってるよな?
で、当然、その構造体のメンバとして、 (mallocで確保した領域への)ポインタを持てることも知ってるよね?
- 536 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 02:24:17 ]
- >>534
mallocとか使って自分で管理するのと違って、クラスにその責任は任せてしまえる。 つまり、あんまり気にしなくていい。
- 537 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 02:24:26 ]
- >>535
はい std::stringで確保したデータが不要になった場合は clear()しておけば従来のfreeに相当する動作ということでいいんですかね?
- 538 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 02:34:49 ]
- ああ・・・いろいろ勘違いを・・・
テンプレートクラスということなので std::string* Data = new std::string(); stringの確保をこういう感じにしてこれを返せばいいんですね
- 539 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 08:06:25 ]
- >>538
ちがーう。 std::string をそのまま int か何かと思って同じように扱えばいい。
- 540 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 11:46:06 ]
- >>537
オブジェクト指向を根本的に勘違いしているな std::stringは一種のクラスであり、それ自体データとメンバ関数の 集まりとして完結しているものだ だから普通のPOD型の変数や構造体と同じように値返しが出来る 但しこれは当たり前だが、関数の中で定義したローカルstringを 参照返しするような事をすれば、これはstringに限らずどんなデータ型 だとしても未定義の動作となる
- 541 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 21:52:32 ]
- 回答側がバラバラすぎて、それぞれ何を主張してるのかよくわからん
- 542 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 21:53:01 ]
- >>538
C++初心者にオススメ。 ロベールの部屋 www7b.biglobe.ne.jp/~robe/ Codian www.kab-studio.biz/Programing/Codian/ 猫でもわかるプログラミング www.kumei.ne.jp/c_lang/ 少なくともこれぐらいは読んで 初めて質問が出来るレベルになるだろう と思います。
- 543 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 22:12:47 ]
- 素直にCから学べばよかったのに
- 544 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 22:14:20 ]
- Cから学ぶとC++の習得に余計な時間がかかるぜ
- 545 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 22:26:47 ]
- Javaだのを習得して、おかしな脳内回路ができるよりマシ
|

|