X



【初心者歓迎】C/C++室 Ver.105【環境依存OK】

■ このスレッドは過去ログ倉庫に格納されています
0060デフォルトの名無しさん
垢版 |
2019/06/18(火) 11:39:47.81ID:YX5RP0uz
まぁ 文字列長がちがったら いきなり不一致って脱出してもいいんだけどね
0061デフォルトの名無しさん
垢版 |
2019/06/18(火) 11:50:07.19ID:uzZY1452
https://ideone.com/JUWWBr
分かり易くなったゾ

変数を減らせばラク
lenで判定してるイマイチな書き方を排除すればもっとラク
要するに分かりにくく書いてるから分かりにくいだけだよ
0063デフォルトの名無しさん
垢版 |
2019/06/18(火) 12:36:36.95ID:uzZY1452
ループを再帰に直せば終了条件がもっと分かり易くなるゾ
再帰にして時系列の1段階ずつ見せればその1段階ごとにどういう判断してるか分かり易いでしょ

bool scr(char* p, char* q){//string compare recursive
if( *p == '\0' || *q == '\0' ){
if( *p == *q ){
return true;
}
return false;
}
if( *p != *q ){
return false;
}
return scr(p+1, q+1);
}

元のヤツは文字コードと文字列の長さがこんがらがってぐちゃぐちゃになってるから分かりにくいんだなコレ
同じ文字列かどうかを、「文字コードが同じか」と「文字列の長さはどうか」、この二つで判断してるでしょ
判定するのに全く別の二つのものを取り扱ってるから分かりにくいんだよ

forのカウンタのiの取り扱いも分かりにくい
文字列長さの境界の+1の有無も分かりにくい

文字コードが同じじゃなければbreakしてlenで判定、すんごく分かりにくいでしょ
何せ「文字コードが同じじゃなければbreak」、その通りなんだけど「意味が理解できない」と来てる、意味が分かってるのに「分からん」と言ってるワケだ
結局はbreakしてるはiのカウントを止めるためと、lenと比較するためにforのスコープ超えた場所でiの値を参照するため

これ入門書の前段階までにfor文の外側でiの値を参照してる例がないと詰まる箇所だよ
for文の外側でiの値を使う、この意味が分からんと「文字コードが同じじゃなければbreak」まで分かってても全体が分からないようになってる
0064デフォルトの名無しさん
垢版 |
2019/06/18(火) 12:55:58.74ID:GYXVYwQo
ポインタを知らないであろう初学者にポインタ演算を使って分かりやすいとする鬼畜の所業
0065デフォルトの名無しさん
垢版 |
2019/06/18(火) 16:53:31.85ID:eB4Ftz1Y
>>57~63回答ありがとうございます
説明下手でスイマセン。このコードが書いてある前のページに文字列の比較は出来ないため
str1==str2と書いて判定は出来ないと書いてあったのに
14行目でstr1[i]!=str2[2]で判定してるのがよくわからないです
strlenは\0返さないのですね。そこはスッキリしました。ありがとうございます
0066デフォルトの名無しさん
垢版 |
2019/06/18(火) 18:05:58.84ID:U3/WUc9c
>>65
str1==str2はポインタ(それぞれの文字列が格納されている先頭アドレスの値)を比較してるだけ。
str1[i]!=str2[i]は、str1とstr2のi番目の文字を比較している。
0067デフォルトの名無しさん
垢版 |
2019/06/18(火) 18:50:13.29ID:ujoReLWG
>>66
文字列の中身を比較してるんじゃなくて先頭のアドレスを比較していて
str1[i]!=str2[i]は文字列の中身を比較してるってことなんですね
もやもやが解けました。ありがとうざいます
0070デフォルトの名無しさん
垢版 |
2019/06/18(火) 22:39:27.24ID:R4l3qwnJ
int a = b - 1;
if (a < 0){
 a = 0;
}

これのスマートな書き方を教えてください。
0071デフォルトの名無しさん
垢版 |
2019/06/18(火) 22:45:19.63ID:BC11WozD
ここで聞いていいのかわからないけど
組み込み系で上位割り込みでライト、下位割り込みでリードする場合割り込み禁止する必要ありますか?
0072デフォルトの名無しさん
垢版 |
2019/06/18(火) 23:11:51.18ID:gZnFDsgJ
>>70
それ以上にスマートな書き方なんてない
素直が一番

>>72
atomicにアクセスできないなら必要
readの途中でwriteが発生したらダメだし、
writeの途中でreadが発生してもダメなんだから、上位/下位は関係無い
0075デフォルトの名無しさん
垢版 |
2019/06/18(火) 23:28:32.54ID:BC11WozD
>>72
何故ダメなのかが理解できてません。
書き忘れてましたが割り込みはタイマで周期的に発生させてます。
リード中にライトが発生しても下位割り込みは一周期遅れて上位割り込みのライト結果をリードするだけではないのですか?
0076デフォルトの名無しさん
垢版 |
2019/06/18(火) 23:45:23.52ID:gZnFDsgJ
>>75
writeの割り込みが発生するまではreadは進行するんじゃないの?
だから「readの途中で」なんだけど
「2つの割り込みは完全制御下にあり、read中にwriteは発生しない」なら大丈夫だよ、当然
0077デフォルトの名無しさん
垢版 |
2019/06/19(水) 00:02:23.61ID:/MswhT0Q
>>75
>リード中にライトが発生しても下位割り込みは一周期遅れて
ここがちょっと勘違いを感じる
割り込み処理が終わったら、割り込まれた処理の続きをするのよ
低レベルにDBのrollbackみたいな複雑な仕組みはないのよ
0078デフォルトの名無しさん
垢版 |
2019/06/19(水) 02:33:40.48ID:v2+76oWz
char型の動作がどうもわからない。
例えば 
char str[] = "abc"; として
cout << &str[0]; ----> abc
になるのはなんで? index 0番だから a がでると思ったんだけど...
初心者ですまん
0079デフォルトの名無しさん
垢版 |
2019/06/19(水) 03:26:09.45ID:0DgdOBcz
>>78
&str[0]に付いてる&はアドレスを取得する演算子だから、strの最初の文字「a」のアドレスを取得するという意味になり、
結果的には cout << str; と同じことになる。
0080デフォルトの名無しさん
垢版 |
2019/06/19(水) 05:18:40.21ID:xxgeB2IO
>>78
cout << &str[0] << '\n';
cout << str[0] << '\n';
この2行でソースと実行結果を見比べれば腑に落ちるんじゃないかな。
0081デフォルトの名無しさん
垢版 |
2019/06/19(水) 08:25:58.04ID:huda4IDC
>>76
>>77
下位割り込みのリードが一命令で完了するなら「リードの途中でライト」が発生しないので割り込み禁止しなくていいということですか?
例えばリードライトの対象が配列なら割り込み禁止要、変数単体なら不要
0082デフォルトの名無しさん
垢版 |
2019/06/19(水) 09:03:32.83ID:bPRT+MIA
>>81
アセンブラ確認してほんとに一命令なら良いけどそうじゃないなら結局危険じゃない?
Cで1行だからアセンブラでも一命令とはかぎらんよ
0084デフォルトの名無しさん
垢版 |
2019/06/19(水) 09:22:03.41ID:RukLP400
たとえ1命令でも安全かどうかはcpuによる
あいまいな質問にはあいまいな回答しか返らない
マニュアル読むのが正解
0085デフォルトの名無しさん
垢版 |
2019/06/19(水) 09:54:17.80ID:huda4IDC
>>82
なるほど。極端な例ですがcでword変数への代入処理一行だったとしてもアセンブラでは上位バイト、下位バイトを分けて代入してるかもしれませんもんね。

>>83
そうです。

>>84
アセンブラで一命令でもまずい場合ありますか?例えでもよいのでご教授頂けたら助かります。
0086デフォルトの名無しさん
垢版 |
2019/06/19(水) 11:34:02.00ID:kjBiA8ae
vector<std::vector<char> > vec;
の二次元配列で、一行を削除するのはどうしたらよいのでしょうか。

int row = 1;
vec.erase(vec.begin() + row );
ではだめなんでしょうか。
0087デフォルトの名無しさん
垢版 |
2019/06/19(水) 11:40:44.36ID:kjBiA8ae
すみません。これでちゃんと動きました。
お騒がせしました。
0089デフォルトの名無しさん
垢版 |
2019/06/19(水) 20:53:07.15ID:RukLP400
>>85
だから一般論で答えられないって言ってんの
使ってるcpuのマニュアル読め
書いてあるから
0090デフォルトの名無しさん
垢版 |
2019/06/19(水) 23:49:00.15ID:v2+76oWz
>>79
>>80
回答ありがとう。
そもそもaddress-of演算子でIndex 0番を指定してるのに アドレス値じゃなくて 文字が出てくることが混乱の元だった。

char型については>> 演算子がオーバーロードされててc-stringとして解釈される。
実際のアドレスを出力したい時は
cout << (void *)&str[1]; とする
って感じでいいのかな?
0091デフォルトの名無しさん
垢版 |
2019/06/23(日) 01:18:33.15ID:X4lwQ0L+
学校の課題でバブルソートアルゴリズムを使った画像処理の課題で、VSの警告にfor-loopの定義が無効です:最初の条件はテストを満たしていません。ループボディは実行されませんと出てきます。これはどういった原因で出てくる警告なのか教えほしいです
0096デフォルトの名無しさん
垢版 |
2019/06/24(月) 06:51:52.73ID:lwUqObiG
FILE* file;
file=fopen("test.txt","w");
fclose(file);

これでソリューションのフォルダ内にtest.txtファイルが作られると読んでる入門書には書いてあるのですが
VisualStudioのフォルダ内、何処を探しても生成されてません;何処に有るのでしょうか?
0100デフォルトの名無しさん
垢版 |
2019/06/26(水) 01:39:16.88ID:6WTwK8fu
STLコンテナ「set」の特定要素を削除したいとき

set<int> s = {1,2,3};
for (auto itr = s.begin(); itr != s.end(); ++itr) {
cout << *itr << endl;
if (*itr == 2) s.erase(itr);
}

これの実行結果が
1
2
1
3
となるのですが、erase後に最初に戻っているように見えるのは偶然、つまり不定の動作ですか?
なお、正しいイタレータの使い方は以下のようになるのは承知してます

for (auto itr = s.begin(); itr != s.end(); ) {
cout << *itr << endl;
if (*itr == 2) itr = s.erase(itr);
else ++itr;
}
0101デフォルトの名無しさん
垢版 |
2019/06/26(水) 07:52:05.91ID:Re4GWmuT
>>100
erase で無効になったイテレータの使用により動作は未定義となります。
そのコードの場合は erase 直後にくるループ条件にある比較時点で。
0104デフォルトの名無しさん
垢版 |
2019/06/26(水) 14:50:08.20ID:7raG/MY1
未定義動作を起こしてるんで
プログラムがたまたまクラッシュもせずに最後まで動いたというレベルからの偶然
0106デフォルトの名無しさん
垢版 |
2019/06/28(金) 01:54:12.27ID:kYWVUvHS
constを外すのに使う const_cast<T&>(t) ですが、Tをいちいち書くのが面倒なので
そうだdecltypeを使えば楽できると思ったものの、remove_constも併用しないといけないみたいですね
参照だったらさらにremove_referenceも必要で、これじゃTがくっそ長くない限り有り難みが薄いですね
なんかもっといいやり方ないですかね?

const int i = 0;
const_cast<remove_const<decltype(i)>::type&>(i) = 1

const int& j = i;
const_cast<remove_const<remove_reference<decltype(j)>::type>::type&>(j) = 2;
0108デフォルトの名無しさん
垢版 |
2019/06/28(金) 02:11:51.51ID:4VImPalK
const_cast<decay_t<decltype(i)>&>(i)
で大体事足りる

まあ大抵は
using U=decay_t<...>;
とかしておくが
0110デフォルトの名無しさん
垢版 |
2019/06/28(金) 18:20:06.99ID:SuTGhcfs
作りたいものにC++が必要なので1から学んでるプログラミング初心者です

biginteger という型の使い方・使い道がよくわからず悩んでいます。
0111デフォルトの名無しさん
垢版 |
2019/06/28(金) 21:15:56.74ID:+JSlLfql
C/C++の標準にそんな型ないよ
C#にBigIntegerあるみたいだね
使い方は普通の整数型と同じ
使い道は、大きな整数を扱いたい時

使い道がわからないものを無理に使う必要ないんじゃね?
0114110
垢版 |
2019/06/29(土) 19:00:51.29ID:gqtgvd1f
標準の型じゃなくて読み込んでるライブラリ?のクラスだったみたいです
そっちのマニュアルを見て見たら詳しく書いてありました…
いろいろ教えていただきありがとうございました。
0115デフォルトの名無しさん
垢版 |
2019/07/24(水) 09:52:41.24ID:0j2752sC
オブジェクト指向を使ってないアプリを c++ (コンパイラはg++6)で作るのは良でしょうか?それとも推奨されないでしょうか?

当方、意図せずにそうなってしまいました。
Cで書いてるつもりだったのですが、Cでは認められないと知らずにブロック頭以外の所での変数の宣言などを使っていて、
エラーにならなかったのは、Makefile が c++
用の流用で、ソースの拡張子が.cc だったからでした。

こんな c++ コンパイラの使い方は、許される事なのか、良くある事なのか気になりました。
0116デフォルトの名無しさん
垢版 |
2019/07/24(水) 10:00:57.54ID:zKJbgf3R
Cで書いてるつもりがC++になってた、は良くはないけど別に気にすることじゃないかと
Cであることが要件ならCに直せばいいし、C++でもokならそれでもいいし
要件満たすものが出来てんならひとまずokじゃない?
0118115
垢版 |
2019/07/24(水) 12:47:15.91ID:qoUieyoj
>>116 どうもです。
ひとまず動いてるのですが、気になりました。

例えば、「完全にcで書いていてcでコンパイル出来るものでも、c++ 必要なものでも、どちらにも拡張子は .cc に統一して、どちらにも常にコンパイラは c++ を使う」と言う態度ってどうでしょう?
c++ が c の上位互換ならこれで良いように思えます。
0119115
垢版 |
2019/07/24(水) 12:48:43.68ID:qoUieyoj
>>117
そうなのですか?
私の見た情報が古かったのですかね。
0120デフォルトの名無しさん
垢版 |
2019/07/24(水) 13:31:50.28ID:zKJbgf3R
>>118
いや、プログラムってそもそも道具なんだから何で書かれてるかとかどうでもいいかと
複数人で開発していて他人もコードを見ることがある、技術情報として発信する、要件として言語の指定がある
とかいう縛りがあるならその縛りに応じるようにコードを書き直せば良い
個人的にはCでなければ困るというのでなければC++にするし、多少の困りくらいなら回避してC++にする
基本的にC++はCの上位互換
0121115
垢版 |
2019/07/24(水) 20:52:46.78ID:qoUieyoj
私が知りたかったのは、ソースを書くのに何言語を選ぶべきか、でははないです。
知りたかったのは、例えば、
「ソースが c -> gcc 。ソースが c++ -> g++」
をしないで
「一切合切どちらも常に g++ 」でも良いのか?でした。
0122デフォルトの名無しさん
垢版 |
2019/07/24(水) 21:07:11.23ID:0jLIOgkf
>>121
ダメです。兄弟はもう袂を分かちました。
30年前の仕様しか使わないと心に決めているならお好きに…
0123115
垢版 |
2019/07/24(水) 22:28:11.62ID:tRuObC3H
>>122
>>121
>ダメです。兄弟はもう袂を分かちました。
>30年前の仕様しか使わないと心に決めているならお好きに…

どうもです。そうなのですね。
「一切合切 gcc 」はダメでも「一切合切 g++ 」なら大丈夫かと思ってしまいました。
なにぶん始めたばかりでして、この辺りの常識がないのです。
0124デフォルトの名無しさん
垢版 |
2019/07/24(水) 23:59:42.77ID:7wBUx5ir
良い悪いじゃないけど
実質的にCのプログラムでしかないなら純粋なCのプログラムとして書き直して
Cコンパイラとの組み合わせで使っていた方が幸せだと思うよ
0125115
垢版 |
2019/07/25(木) 13:26:54.50ID:A3AJFf0Q
その方がサイズも小さく速度も速いですかね。
トライしてみます。
0126デフォルトの名無しさん
垢版 |
2019/07/27(土) 08:53:41.05ID:zR8v2AWF
>>125
ブロック変数宣言の位置だけがブロックの冒頭ではないというだけなら、通常、
速度低下は全く無く、それをブロックの冒頭に書き直しても速くなることは
有りません。

また、コンストラクタ、デストラクタ、仮想関数、STL、コンテナなどを使わない限り
通常、C++がCより遅くなるということは有りません。
0128デフォルトの名無しさん
垢版 |
2019/08/05(月) 22:51:14.97ID:DMRdHfR+
これからC++勉強しようと思うのですが、
開発環境は何を入れるのがおすすめですか?

Visual Studio Communityが無料で良いのでしょうか
他におすすめあれば御紹介願います

あと、C++勉強に当たっておすすめ定番の本あれば
ご教示ください
0129デフォルトの名無しさん
垢版 |
2019/08/05(月) 22:55:30.85ID:vqN4pUkV
今時ならUbuntu入れてatomなりvs codeなり入れりゃいいんじゃないかな
純粋にc++の勉強したいなら

VCは独自仕様が酷すぎるから言語学習には不向き
0130デフォルトの名無しさん
垢版 |
2019/08/05(月) 23:01:28.37ID:nblSLoEW
VCの独自仕様が気に入らんのならVS2019で対応したLLVMツールセットを使えばいい
初心者にIDEなしはモチベ維持が困難
0131デフォルトの名無しさん
垢版 |
2019/08/05(月) 23:18:05.24ID:f20npl5p
独自仕様ならGCC、未実装ならVCってかんじだがどちらも独自仕様はオプションで制御できる
まあWindows環境でやるならVisualStudio使わないのはマゾ

おすすめできる定番の本についてはどれも一長一短だし
テンプレートの利用くらいまで扱ってればとりあえずなんでもいいと思う
0132デフォルトの名無しさん
垢版 |
2019/08/05(月) 23:29:17.63ID:vqN4pUkV
vcのは独自と言っても、なぜかコンパイルが通らない
なぜかコンパイルが通る
なぜかリンクエラーが起こる
みたいなあまり明文化されていないのだから面倒
structとclassがリンカで別物ってのは酷すぎる
0135デフォルトの名無しさん
垢版 |
2019/08/06(火) 00:52:13.35ID:pONItBAd
コマンドライン引数ってのが何を出来るものなのか全く分からないのですが、何が出来るものなんでしょうか?
書き方はまー分かったんですけど、空のメモ帳をドラッグ&ドロップすると意味あるみたいなこと書いてあるけど何も起こりません…

使用環境Visualstudio2019 で見ているサイトhttp:ああwisdom.sakura.ne.jpあprogramming/c/c32.htmlです
0136デフォルトの名無しさん
垢版 |
2019/08/06(火) 11:26:59.34ID:qIlFvc4N
std::optionalが内部に値を保持する仕組みについてお聞きしたいことがあります
現在いくつかのサイトを巡り、値を保持するためにstd::aligned_storageで確保した領域に配置構文newで値を書き込んでいることがわかりました
このaligned_storageを使った場合に、std::vectorなどのサイズが可変な値が格納されるとどういった挙動になるのでしょうか
vectorの要素数が増えてサイズが大きくなると、alinged_storageで確保したサイズを超えてしまったりしないのでしょうか
0137デフォルトの名無しさん
垢版 |
2019/08/06(火) 14:04:02.23ID:AX25/xXa
根本的な部分の理解が足りていない気がするが直接の答えとしてはvectorのサイズは増えないので問題ない。
vectorが管理しているバッファのサイズは増える。
vectorはポインタを持っているだけ。
0139デフォルトの名無しさん
垢版 |
2019/08/07(水) 00:38:52.58ID:pFHPYbJE
VS2019でchar* name="ABC"みたいにやると
cont char*値を使用してchar*のエンティティを初期化することはできません。とエラーが出るんですけど
どうしたら実行できます?
ググったらcharの前にconst付けると直るみたいですけどこの例だと治りませんでした
http://ideone.com/YyFypJ
0141デフォルトの名無しさん
垢版 |
2019/08/07(水) 04:58:05.08ID:pFHPYbJE
>>140
それはやったんですけど出来ませんでした
paizaとかはconstとか付けなくても付けても出来ましたけどVSでは出来ないのでしょうか?
0146デフォルトの名無しさん
垢版 |
2019/08/07(水) 10:45:14.88ID:9Ff0DYo3
>>139
C/C++の言語仕様的には
const char *name="ABC";
で行ける可能性は高いんですが、分かりやすさのためには、
static const char szName[] ="ABC";  // szName[4] という配列を "ABC",0 で初期化。
const char *name =&szName[0];
とするものお勧めです。
0147デフォルトの名無しさん
垢版 |
2019/08/07(水) 11:36:34.89ID:Io4EJaZl
少なくとも>>139のリンクにあるコードはchar*にリテラルを入れようとしてるのでNG
constをつけても駄目なのは生成後に代入しようとしてるから
てか意味もなくグローバルスコープの構造体とかやめろ
0148デフォルトの名無しさん
垢版 |
2019/08/07(水) 17:26:37.26ID:Io4EJaZl
あと特に理由がないなら文字列はstd::stringを使うべき
C言語じゃないんだから
0150デフォルトの名無しさん
垢版 |
2019/08/08(木) 08:01:13.41ID:kZ+216R/
>>147
構造体メンバに
const char *name;
と書いていて、構造体を生成後に後から name メンバに
Cの文字列リテラルの先頭アドレスを代入することは、
C/C++の言語仕様的にはいけるはずです。
なぜなら、xxx.name のように書いた場合、コンパイラの内部的には
const char* 型の左辺値(代入先)が有るのと同じように扱われるので、
ローカル変数に const char *aaa; aaa = "xxx"; と書いた場合と変わらなく
なるはずですから、C/C++ の言語仕様的には。
0151デフォルトの名無しさん
垢版 |
2019/08/08(木) 16:00:04.26ID:uMVCdDWb
独自のクラスに比較演算子==を実装する時、クラス内に定義するのとグローバルで定義するのとでは、実装の仕方以外に違いがあるのでしょうか?

また、例えば独自クラスとintの比較演算子==を実装する場合は、左辺にintがある場合と右辺にintがある場合の二つを用意する必要があるのでしょうか

ちなみに使用しているのはC++11です
0153デフォルトの名無しさん
垢版 |
2019/08/08(木) 16:35:41.72ID:uMVCdDWb
>>152
これって自分でやったところで解決できる質問なのでしょうか?
もちろん既に自分で実装していますが、自分で使ってみた感じではクラスでもグローバルでも一切の違いがないと「思います」
左辺と右辺のintについても、わざわざ2つの演算子を定義するしか方法がないと「思います」
0154デフォルトの名無しさん
垢版 |
2019/08/08(木) 23:38:32.45ID:gitRBAeC
クラス内に定義するのとグローバルで定義するのとってどういう意味でだ?
クラスのメンバ関数と普通の関数として定義するのとってこと?
あるいはクラスのstaticメンバ関数と普通の関数?
そういうのとは違ってクラス定義の中にメンバ関数の定義も書くのと
クラス定義の中では宣言だけで外に定義を書くのとってこと?
0155デフォルトの名無しさん
垢版 |
2019/08/09(金) 01:10:13.49ID:QHhCdgXb
>>151
クラス内に定義すると当然メンバー関数扱いなるのでprivateメンバーにアクセスできるが、左辺を自クラス、右辺をintにoperatorしか定義できない。
クラス外に定義すると、そのままではprivateメンバーにアクセス出来ないが、左辺、右辺どっちでも自由に定義できる。
0156デフォルトの名無しさん
垢版 |
2019/08/09(金) 01:23:46.70ID:QHhCdgXb
>>151
相手がintの場合はわざわざoperator==を定義しなくても、intへの型変換operatorを定義すれば勝手に変換してくれるので、そっちの方が楽だと思う。
0158デフォルトの名無しさん
垢版 |
2019/08/09(金) 11:09:20.14ID:0rjrOlB6
>>155
大きな違いとして出てくるのは実装面の都合になってくるわけですね
>>157 の方の言う通り楽な方で実装しようと思います

>>156
型変換のオペレータを実装するのは思いつきませんでした
確かにそれが一番手っ取り早いですね
教えていただきありがとうございます
0159デフォルトの名無しさん
垢版 |
2019/08/10(土) 01:46:44.99ID:07GKNAvB
質問ですがリフレクションってのは何ナノですか?
これがないのがC++の欠点って言われてるそうですが
0160デフォルトの名無しさん
垢版 |
2019/08/10(土) 02:13:52.05ID:0AyH8q+k
ググって何がわからなかったのか書けよ
そういう気配り謙虚さがないからお前は伸びないんだよ
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況