C++相談室 part148

■ このスレッドは過去ログ倉庫に格納されています
2020/01/31(金) 20:54:06.26ID:Nt0XFA2s
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

前スレ
C++相談室 part147
https://mevius.5ch.net/test/read.cgi/tech/1576659413/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.105【環境依存OK】
http://mevius.5ch.net/test/read.cgi/tech/1556142878/

■長いソースを貼るときはここへ。■
 http://codepad.org/
 https://ideone.com/

[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
268デフォルトの名無しさん
垢版 |
2020/02/06(木) 17:11:56.16ID:v+RXRHu+
コンパイルの警告のためだけだから
実行時コストは0じゃね
269デフォルトの名無しさん
垢版 |
2020/02/06(木) 17:13:00.89ID:v+RXRHu+
手でタイプするコストうんぬん言うなら
マクロで #define LEN(s) ((int)s.size())
2020/02/06(木) 17:18:31.70ID:jSrTrJa0
>>267
最も正統派なのはこうかな?
for(decltype(v)::size_type i=0; i<v.size(); i++)
常識的に考えてコンテナの size_type が std::size_t より大きいことはあまりない (大抵は等しい) と思うので、面倒なときは std::size_t を使う。

本当に上限が限られていてその上限が変更されることがあり得ないほどそのプログラムにとって
本質的なものだと判断すれば int でいいやってこともあるといえばあるだろうし、
同じようなパターンが何度も現れるならアダプタを作った上で範囲forというのも考えられる。

状況によるでしょ。
2020/02/06(木) 17:24:46.97ID:2fVM4odH
int i = 0; と書かずに size_t i = 0; と書くのはどうだい?
v.size() が本当に size_t を返すか、という問題はあるが。

for (decltype(v.size()) i = 0; i < v.size(); i++)
と書くこともできるね。

i の型が int でないと不味いのかも知れんけど。
2020/02/06(木) 17:39:05.78ID:/W9iMVJD
>>267
コスト(性能)最優先か
見やすさ最優先か
タイプ数最優先か
次第

キャストのコストって言うけど
intとv.size()のサイズが違えば
どのみち型変換する

コンテナ使うような場所でこんな微妙なコストを気にしてもしょうがないし
>>270は面倒

(業務外だと)私は警告放置が多い
警告を消したい場合はsize_tにするか
コンパイラの設定を変えるか

業務で集団でのコーディングの場合は
他の部分を見て空気を読む
2020/02/06(木) 17:43:47.39ID:/W9iMVJD
>>269は色々な理由で無い
274デフォルトの名無しさん
垢版 |
2020/02/06(木) 17:44:41.65ID:v+RXRHu+
for(unsigned int i=0, len=v.size(); i<len; i++)
これもよく見るか
2020/02/06(木) 17:46:58.02ID:5ihPHl5F
auto i=0uにしてるな
2020/02/06(木) 17:48:08.30ID:VEO7DUBt
>>269
template <typename T> inline auto len(T s) { return s.size(); }
2020/02/06(木) 17:48:51.04ID:VEO7DUBt
あ、右辺値参照わすれたw わりーわりー
2020/02/06(木) 17:49:18.67ID:/W9iMVJD
警告を消す為だけなら設定を変えるのが良い
2020/02/06(木) 17:50:35.38ID:/W9iMVJD
>>276
何の解決にもなってない
2020/02/06(木) 17:54:27.57ID:jSrTrJa0
>>279
良くはないがマクロよりはマシ
2020/02/06(木) 18:09:13.09ID:3IyMYliq
>>274
その形が一番、速度的には良い。
forの第二式は毎回評価されるが、v.size()の部分をコンパイラが自動的に最適化するのは非常に難しい場合があるから。
2020/02/06(木) 18:11:29.18ID:3IyMYliq
v.size()の値が、ループ内で変化しない「ループ定数」であると判断するのは
コンパイラにとってはものすごく難しい場合がある。
ループ定数であると判断された場合にのみ、>>274のような最適化が行われる可能性が出てくるが、判定できなければループするたびに毎回評価されてしまうのでループの実行速度が遅くなってしまう。
283デフォルトの名無しさん
垢版 |
2020/02/06(木) 18:30:55.84ID:F7wYIGq0
マクロってそんなに危険なんですか。
2020/02/06(木) 18:33:27.11ID:3IyMYliq
>>283
本人だけが開発していて、記憶力が優れていて絶対に使い方を間違いなければ特に問題ないと思うが、使い方を間違うと危険なことがある。
エラーも出ずに変な動作をしてしまうことがある。
でもそれさえ気を付けていれば特に問題ないとも言える。
285デフォルトの名無しさん
垢版 |
2020/02/06(木) 18:37:31.86ID:3IyMYliq
>>269
マクロで書く場合、
#define LEN(_s_) ((int)((_s_).size()))
と書いたほうが良い。
特に、s や _s_ を()で囲むのは必須。
sを_s_と書くのは、ミスタイプがあった場合の備え。
例えば、マクロの仮引数にsと書いているのに、マクロの定義部分をtと
書き間違えていて、かつ、マクロを使う場所に t という変数がたまたま使われて
いたとすれば、エラーにならないのに間違った動作をしてしまう。
_s_と書いていれば、_s_という変数は絶対に使われないのでこの心配がない。
そのため、マクロの引数は伝統的に、_s_などのように書くことが推奨されている。
286デフォルトの名無しさん
垢版 |
2020/02/06(木) 18:50:57.77ID:v+RXRHu+
バッドノウハウ紹介乙

>>285
>>276
2020/02/06(木) 19:30:05.95ID:/W9iMVJD
>>280
適してるかどうかはともかく
>>269は解決にはなってる
>>276は解決になってない
2020/02/06(木) 19:38:40.11ID:zCd4f5nI
皆さんありがとうごさいます。
結構難しいですね。

>>274
> for(unsigned int i=0, len=v.size(); i<len; i++)
これは
for(int i=0, len=(int)v.size(); i<len; i++)
としても性能上そう変わらないですよね?
ループ変数はintであってほしいと思うので、これが自分には向いているように思いました。
2020/02/06(木) 19:42:58.30ID:bk3hpXlE
>>275に一票
2020/02/06(木) 20:10:32.24ID:9e+8kNR/
キャスト一回って機械語4つくらいじゃあないの?
そこまでシビアってのは競技プログラミングか脳手術ロボットでも作ってんの?
2020/02/06(木) 20:24:03.42ID:/W9iMVJD
4個もいらん
2020/02/06(木) 20:29:38.17ID:/W9iMVJD
糞コンパイラまで考えてパフォーマンスを考えると>>288だけど
そもそもコンテナ経由でアクセスする時点でそんな事は誤差

そのループに非常に時間がかかるなら
ループ全体で最適化しないと
2020/02/06(木) 20:40:31.72ID:3IyMYliq
>>290
同じBIT数やBIT数が少なくなる場合の整数型から整数型へのcastは、マシン語では0命令(命令が出力されない)。
高級言語では違う型でもマシン語レベルでは変わらないため。
BIT数が多くなる場合には、x86の場合は、movzx や movsx が使われる。
294デフォルトの名無しさん
垢版 |
2020/02/06(木) 20:41:12.62ID:3IyMYliq
>>292
実際には、最適化が上手く行かないことも多いので差が出てくることは多い。
2020/02/06(木) 20:42:39.58ID:3IyMYliq
>>293
つまり、符号無しや符号付の区別はマシン語ではないので C/C++言語で
castしても高級言語レベルでの意味が変わるだけでマシン語レベルでは
何の命令も増えることはない。
2020/02/06(木) 20:49:08.28ID:VEO7DUBt
素直にrange-based-for
これが出てきたことの影響のでかさがわかってないやつ多すぎ

禿4にはfor_eachを使う前にもっと適した関数を探せとあるが
本当にそうか自分の頭で考えろ
2020/02/06(木) 20:56:38.87ID:/W9iMVJD
コストを気にしてる人に対してトンチンカン
2020/02/06(木) 21:03:18.93ID:/W9iMVJD
普通のコンパイラなら
コンパイル単位内の関数は一緒に最適化するので
.size() の中で値を返してるだけなら
ループの外に追い出してくれる
ターゲットがPCなら気にするな

それよりv[i]の方が重い
2020/02/06(木) 21:03:40.80ID:VEO7DUBt
何もわかってねえやつ
2020/02/06(木) 21:17:40.42ID:X3a4Tx/S
未だindexループよりrange-basedのほうが早い処理系がない件

>>298
v[i]が重いってどんなstlコンテナだよ
2020/02/06(木) 22:12:04.60ID:6P0xXhLK
>>267
>警告を一つ残らず潰したいタチだから
ここまでは同感です

>毎回こういうのはintにキャストしてるんだが、
私なら int i を unsigned int i にしますが
2020/02/06(木) 22:16:59.41ID:cE8ku0Th
templete<typename T>auto LEN(const T& v)->signed T{return (signed T)v;}
2020/02/06(木) 22:22:15.30ID:j/UITOXa
とりあえず大きい方に合わせとけば間違いないんだからsize_tでいいじゃん
そのvの要素が将来に渡って21億個を超えない保証がどこにある?
2020/02/06(木) 22:45:07.03ID:/W9iMVJD
>>300
整数のキャストに比べればはるかに重い
そのレベルを気にするなら生ポ
2020/02/06(木) 22:53:37.31ID:sigCaOr9
x86なら32bit命令使った方がバイナリ小さい
2020/02/06(木) 22:57:14.86ID:sigCaOr9
>>304
vectorだと生ポと変わらんでしょ
もちろん最適化前提で
2020/02/06(木) 23:03:20.12ID:YUB/hFRs
>>300
range-basedはiterator
c++のiteratorはindexが速くなる連続アドレスのコンテナならpointerと同じコンパイル結果になる

indexアクセスがpointerより遅くないなら、それはコンパイラの最適化のお陰
2020/02/06(木) 23:13:46.15ID:/W9iMVJD
>>306
生ポと変わらなきゃ良いんだけど
変わるんだよ
VisualStudioやチープなコンパイラだと

いずれにしろここから先は
具体的な環境とループ回数やループの中身全体で考えないと意味がない
なんせ1クロックレベルのことを気にしてるようなので

実はメモリアクセスが支配的で
他の最適化は全く意味がないとか
2020/02/06(木) 23:20:09.64ID:/W9iMVJD
SIMD命令 / DSP命令 / スレッド分け / GPU
他のループと合わせる / ループを分ける
ループアンロール
依存性の削減 / 式変形
アルゴリズムの改善
キャッシュ化 / テーブル化

いろんな最適化がある
2020/02/06(木) 23:45:25.65ID:f00f0WlE
vectorの[]は定数時間
2020/02/07(金) 01:10:19.15ID:BIRgOLIs
ところで元々の質問の >>267 は整数の型が合わないのどのくらい気にする?
っていうのを「一般論として」聞いてるので、これに対しての選択肢を派閥系統樹形式にしてみた

├→ きちんと合わせる派
│  ├→ その環境で合ってれば良いよ派 (移植性は気にしない派)
│  ├→ コンパイラの警告は潰す派
│  │  ├→ 理解しなくてもキャストで合わせるので十分派
│  │  └→ 警告される箇所は仕様の詳細を調べる派
│  └→ size_t とか size_type とか使え派 (言語仕様原理主義派)
├→ 問題がなければ気にしない派
│  ├→ 問題に気づかない派 (鈍感派)
│  ├→ 実行コストに敏感派
│  │  ├→ 最適化はあてにする派 (モダン開発環境派)
│  │  └→ 最適化はあてになんないよ派
│  │     ├→ 低レイヤ派
│  │     ├→ 老害派
│  │     ├→ 諦め派
│  │     └→ ベータ開発環境追いかけ派
│  └→ 状況と程度による派 (柔軟派)
└→ えっ、それって駄目だったん? 派
    ├→ 初心者派
    └→ 無知派
2020/02/07(金) 02:51:26.03ID:dGY48don
>>278
業務外だと、とは書いてあるけど一応突っ込んでおくと
もしそれがコンパイラの警告レベルを下げるとか小さい型へのキャストの警告を無くすとかなら
それはバッドノウハウだよ、真似しないように
313デフォルトの名無しさん
垢版 |
2020/02/07(金) 03:23:36.63ID:yxrGSGnH
じゃあ俺、えっ、それって駄目だったん? 派でお願いします。
314デフォルトの名無しさん
垢版 |
2020/02/07(金) 03:50:27.48ID:yxrGSGnH
テストの品質がすべてを決めるような気がしてきた。
2020/02/07(金) 03:57:04.21ID:plErZoHk
>>311
わし、こうみえて「警告される箇所は仕様の詳細を調べる派」や
その上で、問題なければ「状況と程度による派 (柔軟派)」に再度ブランチする派
316デフォルトの名無しさん
垢版 |
2020/02/07(金) 04:00:36.65ID:yxrGSGnH
Boostは警告を無視する派、GoogleはMicrosoftの問題なので修正する予定はない派。
ってことは、警告だしっぱなしで構わないって事では?
317デフォルトの名無しさん
垢版 |
2020/02/07(金) 04:01:58.31ID:yxrGSGnH
目grepが難しいので、警告は消すしかないんだけど。
318デフォルトの名無しさん
垢版 |
2020/02/07(金) 04:04:17.66ID:yxrGSGnH
変数の大きさが変わると同じ値のビット表現が変わるのはしんどいので、符号が一番右端にあったほうが良かったんじゃないの。
右端ならビット表現が変わらない。
2020/02/07(金) 05:13:16.79ID:zrCiCWWN
型違い面倒だからautoにしても警告出るから何でやおもたらi=0でintだったでござる派
320デフォルトの名無しさん
垢版 |
2020/02/07(金) 06:00:43.94ID:yxrGSGnH
HTMLにしろコンパイラにしろ、Microsoft案のほうが合理的と思うけどな。
規格は政治だよね。
2020/02/07(金) 06:42:07.56ID:52vnIbYM
>>302
signed Tはできねえぞ
std::make_signed_t<T>にしないと
2020/02/07(金) 06:57:58.73ID:52vnIbYM
> コンパイラの警告は潰す派

キャストつーか、#pragmaを使ったりもするね
もち、規格票で自分が悪いのかコンパイラのお節介かはっきりさせてからだけど
2020/02/07(金) 07:21:23.65ID:9DO99WJ1
基本的にはsize_tとかsize_typeとか使え派
面倒でもちゃんとやった方が後のテストや検証は楽なんだよ
まあ無理だったり異様に面倒だったりする場合も現実的にはあるからそこは仕方ないけど
2020/02/07(金) 07:52:22.31ID:+bDqT2Wz
i は int にしたいって言ってるんだから

ここの型をsize()に合わせたら
キャストが他に移るだけ
2020/02/07(金) 08:31:14.28ID:z6HtA7Ca
>>288
いえいえ
2020/02/07(金) 10:49:20.82ID:/rNOv2pQ
>>298
vがグローバルなオブジェクトである場合や、ヒープから確保されたオブジェクトの参照型である場合、コンパイラには v.size() がループ定数であるかどうかを判定するのは難しいことが多い。
このスレでもグローバルに確保された構造体型のメンバを参照する場合、最適化され無い事が指摘されていたが、それと同じことが原因。
C/C++ではポインタや参照があるのでグローバル変数やグローバルなオブジェクトのメンバ変数が変化しないことをコンパイラが見極めるのが難しい。
2020/02/07(金) 10:52:27.65ID:VWyX2qgb
for(auto i=v.size()+1; 0<len; --i)

for(auto i : my_range(v.size())
2020/02/07(金) 11:01:57.61ID:52vnIbYM
reverse_iterator first(v.end()), last(v.begin());
for_each(first, last, [](auto& x) { cout << x; });
329デフォルトの名無しさん
垢版 |
2020/02/07(金) 11:41:09.54ID:jtk/IwGo
64bit/32bitまたぎできるソース汎用性を考えれば、負の数が必要ないなら size_tを使うのが最善でしょ。
2020/02/07(金) 12:00:59.89ID:VWyX2qgb
size_tはunsignedなのがうざい
c言語初心者が決めただろこれ
2020/02/07(金) 12:07:12.14ID:VWyX2qgb
あ、上にかいたやつ+1は間違いや
2020/02/07(金) 12:12:42.12ID:52vnIbYM
ポインタ + size_t == ポインタ
ポインタ - ポインタ == ptrdiff_t
おかしいね
2020/02/07(金) 12:33:14.78ID:8FC0VQS8
>>326
仮に毎回アクセスしたとしてもv[i]の方が重い
毎回アドレスを計算して毎回メモリアクセスするわけで
2020/02/07(金) 12:48:40.15ID:Nrn3Ov0h
indexにintはlp64環境だと怖すぎる
2020/02/07(金) 12:51:13.27ID:cytAyAiU
そんなバカでかいインデックス作る方が怖い
336デフォルトの名無しさん
垢版 |
2020/02/07(金) 13:01:32.69ID:jtk/IwGo
ファイルポインタは4GB越えが当たり前だし。
2020/02/07(金) 13:18:28.90ID:8FC0VQS8
ばかでかいループをたくさん作るなら
性能を心配した方が良い

中身にもよるが、ほぼメモリアクセス時間になりかねない
帯域の無駄遣い
ループをまとめるとか細切れにするとか
キャッシュを有効に使う処理にしないと

キャストのコストとか完全に誤差
2020/02/07(金) 13:30:18.43ID:QoBXk/kf
メモリポインタも4GB超えは当たり前だしな
2020/02/07(金) 13:33:10.28ID:52vnIbYM
8086時代の苦しみを知っている人なら
リニアでないポインタやインデックスが
どんなにウザいものかよく知っている

64bit空間なら64bitを使っとけって悪いこと言わないから
2020/02/07(金) 13:45:59.17ID:8FC0VQS8
ループの中身も知らないで良く言うね
int変換必須なら問題点の場所を移動させただけ
341デフォルトの名無しさん
垢版 |
2020/02/07(金) 13:58:09.08ID:jtk/IwGo
今日日4GB越えとかWindowsNT4.0サービスパックですか、と。
342デフォルトの名無しさん
垢版 |
2020/02/07(金) 14:12:43.62ID:PWhN+bN7
納品したときに
コンパイルで警告出るんですが消してって言われて
それ無視して良い警告ですよって言っても
理解してもらえなかった派
343デフォルトの名無しさん
垢版 |
2020/02/07(金) 14:19:34.17ID:PWhN+bN7
あと警告が出ないからと言って
正しく動くと保証されている訳でもなんでもないのに
2020/02/07(金) 14:32:07.46ID:VWyX2qgb
>>342
それはお前が悪い
そんなんで納品するな
345デフォルトの名無しさん
垢版 |
2020/02/07(金) 14:34:22.92ID:jtk/IwGo
客先と同じビルド環境で警告対応しないのは落ち度だね。次の仕事なくなるでしょ。
2020/02/07(金) 14:40:57.67ID:/rNOv2pQ
>>333
BYTE v[数値];
のような生配列の場合、ループの中のv[i]は、最適化が効いてものすごく効率の良いコードになることが多い。
この場合、vがグローバルに確保されたオブジェクトや参照型であったとしても最適化には余り悪影響はない。
vがstd::vector 型の場合で、かつ、vがグローバル・オブジェクトや、参照型の場合は、コンパイラはv[i]を上手く最適化できないかもしれない。
2020/02/07(金) 14:42:08.26ID:/rNOv2pQ
>>346
すまん。
後半部分は勘違いかもしれない。
2020/02/07(金) 14:47:50.81ID:5UxOF8qK
>>346
VCはvectorでも生ポインタに近い最適化はしてくれてるみたいだぞ
2020/02/07(金) 15:03:24.58ID:jtk/IwGo
客や同僚から使えないプログラマ認定されていることに気づけず独りよがりな考えに凝り固まる人いるよね・・・
かわいそうではあるけど、かかわりたくないタイプの人。
2020/02/07(金) 15:15:12.08ID:BIRgOLIs
標準ライブラリのコンテナのイテレータを sizeof で見ればわかるが、ほとんどの場合で void* と同じ大きさ。
要するにポインタ一個分の情報しかないし、実際ポインタが入ってるし、ポインタの操作になってる。
しいて言えば操作がメンバ関数経由になる分のコストはあるといえばあるけど、
それくらいのインライン展開はするのが普通でしょ。
vector の場合だと領域が連続する保証があるのでインライン展開だけでイテレータはポインタと同じになる。

VC のコンテナだとデバッグモードではイテレータが少し大きい (のと範囲チェックとかする) ってなことらしいんだが、
処理系をインストールしてないから試してない。
2020/02/07(金) 15:20:21.87ID:E/TdO4KU
>>349
おまえがきちんとした仕様を提案できないで投げっぱにしてるからそんなことになってんじゃないの?
2020/02/07(金) 17:16:18.19ID:52vnIbYM
>>340
64bit空間で64bit以外のインデックスを使うべきループの中身とやらを書かないあんたが悪い
書けないんじゃないのか?
2020/02/07(金) 17:31:01.39ID:Nrn3Ov0h
intだとたったの2G要素でオーバーフローして無限ループになるのが怖い
354デフォルトの名無しさん
垢版 |
2020/02/07(金) 17:31:33.35ID:yxrGSGnH
イテレータよりポインタのほうが速いよ。
ホントだよ。
いまベンチとってるから。
偶然だけど。
2020/02/07(金) 17:34:39.39ID:jtk/IwGo
>>351
「無視して良い警告」とか勝手に判断する困ったPGにきちんと仕様を提案しても無駄でしょ。解雇するわ。
356デフォルトの名無しさん
垢版 |
2020/02/07(金) 17:37:50.00ID:PWhN+bN7
unsigned だと
for(unsigned i = s.size(); --i >= 0; ){...}
みたいなので警告出るんだっけ
2020/02/07(金) 17:41:09.31ID:Nrn3Ov0h
警告で指摘された問題点に対処もせずに、キャストやらで無理やり消す位なら、出たまま放置の方が100倍マシ
358デフォルトの名無しさん
垢版 |
2020/02/07(金) 17:43:22.94ID:yxrGSGnH
ヒープ作るとき、マイナスの値は空きノードのリンクリストに使ったりするので、その手の比較は多発する。
2020/02/07(金) 17:43:55.24ID:BIRgOLIs
うーん、近頃はちょっとした作法レベルのところまで警告として口出しすることがあるからなぁ。
完全に規格に沿って書いてるわ! ってときにはイラッとすることもある。
個別に警告オプションを設定するのも面倒くせぇし、直してしまう方が手っ取り早かったりもするんだけど、
何がなんでも警告をゼロにしろって言われたら警告レベルを低くする対処をしちゃうかも。
2020/02/07(金) 17:52:14.97ID:VWyX2qgb
仕事ではやってんなら手を抜くなぼけ
pragmaとかでなんとでもなるだろ
361デフォルトの名無しさん
垢版 |
2020/02/07(金) 17:55:05.15ID:yxrGSGnH
タモリさんは遊びで手を抜くなって言ってた。
2020/02/07(金) 17:57:41.44ID:jtk/IwGo
従来cppcheckなどの静的解析ツールが出していた警告をコンパイラも出すようになってくれたのは良い動き。
親切なコンパイラに感謝して警告箇所の修正をやればいい。
修正に工数がかかることが懸念されるなら、依頼主にその旨を伝えればいい。
2020/02/07(金) 18:05:13.97ID:kNxPhPNR
>>360
すごい偉そうにしてるけど大丈夫?>>327
;0<len; って···
2020/02/07(金) 18:14:59.44ID:CaNLgYal
雑魚ほどイキがるのはプログラマも同じ
365デフォルトの名無しさん
垢版 |
2020/02/07(金) 18:23:59.39ID:yxrGSGnH
カバレッジ測定のツールって安いの無いのかな。
2020/02/07(金) 18:36:35.61ID:BIRgOLIs
>>360
俺はプログラミングについては趣味者だから実務のことは知らんのだわ。
すまんな。

しかしな、必要以上の品質にするくらいなら手抜きで安くしろって言う客の方が多いと思うぞ。

必要より下になったらあかんのでそこを制御していい感じの
手抜き具合にするのが難しいわけだが、そこを上手くやるのが
手抜きしないことよりもプロに必要な資質じゃね?

手抜きしないよりも適切に手を抜く、どうやって手抜きするか知っていることが大事だ。
仕事は経済的に割に合う形でしか継続できないんだからさ。

そりゃあいつも十全な仕事が出来る時間的・経済的余裕があるならうれしいが、
現実はそうではないだろ。
2020/02/07(金) 18:40:56.99ID:jtk/IwGo
>>366
何言ってんだ?
手抜きしたいからこそ、コンパイラの警告に素直に従うんだぞ。
■ このスレッドは過去ログ倉庫に格納されています