C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ
C++相談室 part146
https://mevius.5ch.net/test/read.cgi/tech/1573094136/
このスレもよろしくね。
【初心者歓迎】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/ (日本語)
STLつかうと一気に実行ファイルサイズが10倍に?!
環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
↑え?だってお前、普通ダイナミックリンクするだろ?
"ダイナミックリンク"す・れ・ば、ファイルサイズ**増えないです**
探検
C++相談室 part147
■ このスレッドは過去ログ倉庫に格納されています
2019/12/18(水) 17:56:53.03ID:uFDqtnkl
492デフォルトの名無しさん
2020/01/22(水) 00:05:18.86ID:LIwEls05 >>484
JavaScriptだとそうかいても速度差がないかもしれないけど、C++だと、
そう書いた場合は、関数を定義してから、マシン語の call 文でその関数が
呼び出されるので結構なオーバーヘッドとなる。
JavaScriptの場合は、どう書いてもオーバーヘッドがあるからそのくらいの
オーバーヘッドは体感速度に登ってこないのでどっちでも良いだけ。
JavaScriptだとそうかいても速度差がないかもしれないけど、C++だと、
そう書いた場合は、関数を定義してから、マシン語の call 文でその関数が
呼び出されるので結構なオーバーヘッドとなる。
JavaScriptの場合は、どう書いてもオーバーヘッドがあるからそのくらいの
オーバーヘッドは体感速度に登ってこないのでどっちでも良いだけ。
493デフォルトの名無しさん
2020/01/22(水) 00:20:06.55ID:2biZgMt+ >>492
ラムダ式はインライン展開されるからオーバーヘッドにはならない
ラムダ式はインライン展開されるからオーバーヘッドにはならない
494デフォルトの名無しさん
2020/01/22(水) 01:14:20.96ID:eHIdhO0H error: no member named 'emplace_back' in 'std::__1::vector<int,
std::__1::allocator<int> >'; did you mean '__emplace_back'?
v.emplace_back(d);
^~~~~~~~~~~~
__emplace_back
/Library/Developer/CommandLineTools/usr/include/c++/v1/vector:696:10: note:
'__emplace_back' declared here
void __emplace_back(const value_type& __x) { push_back(__x); }
^
1 error generated.
push_backは普通に使えるんですけどemplace_backは何故か上記のようなエラーが出てしまいます
一応コンパイラに言われた通りに__emplace_backに変えれば動きはするんですが、普通にアンダーバーなしで
動かすにはどうしたらいいんでしょうか。環境はmacの10.14です。
std::__1::allocator<int> >'; did you mean '__emplace_back'?
v.emplace_back(d);
^~~~~~~~~~~~
__emplace_back
/Library/Developer/CommandLineTools/usr/include/c++/v1/vector:696:10: note:
'__emplace_back' declared here
void __emplace_back(const value_type& __x) { push_back(__x); }
^
1 error generated.
push_backは普通に使えるんですけどemplace_backは何故か上記のようなエラーが出てしまいます
一応コンパイラに言われた通りに__emplace_backに変えれば動きはするんですが、普通にアンダーバーなしで
動かすにはどうしたらいいんでしょうか。環境はmacの10.14です。
495デフォルトの名無しさん
2020/01/22(水) 01:26:38.05ID:2biZgMt+496デフォルトの名無しさん
2020/01/22(水) 09:21:16.15ID:RBeGE/46497デフォルトの名無しさん
2020/01/22(水) 09:24:55.75ID:dJnLloAw >>496
最適化するかしないか自分で選べるんだから、言語のせいじゃないと思うんだ。
最適化するかしないか自分で選べるんだから、言語のせいじゃないと思うんだ。
498デフォルトの名無しさん
2020/01/22(水) 09:47:45.11ID:s6VTVCIo 最近というか昔からだなデバッグまわりがクソなのは
ほんと標準化プロセスは現実のプロダクト開発に関わったことのない言語オタクの遊び場に見えるわ
デバッグをないがしろにするなと
>>497
端的にテンプレートが原因だから言語のせい
というか誰のせいかどうでもいいから解を提供しろと
ほんと標準化プロセスは現実のプロダクト開発に関わったことのない言語オタクの遊び場に見えるわ
デバッグをないがしろにするなと
>>497
端的にテンプレートが原因だから言語のせい
というか誰のせいかどうでもいいから解を提供しろと
499デフォルトの名無しさん
2020/01/22(水) 10:28:10.49ID:dJnLloAw >>498
最適化設定を変えることが解になると思って言ったんだけど、そうはいかないことがあるの?
デバッグまわりがクソだと言うなら、相手はまずコンパイラ&デバッガのベンダであって、言語の標準化は
あんまり関係なくね?
最適化設定を変えることが解になると思って言ったんだけど、そうはいかないことがあるの?
デバッグまわりがクソだと言うなら、相手はまずコンパイラ&デバッガのベンダであって、言語の標準化は
あんまり関係なくね?
500デフォルトの名無しさん
2020/01/22(水) 10:34:22.38ID:Oj6zQLXh インライン展開するかどうか含めて
最適化はコンパイラ依存
パフォーマンス測定やチューニングは
実際の環境でやらないと
可能性で言えばマクロが一番インライン展開の可能性が高い
(コンパイラが賢すぎて同一コードを共有するとかない限り)
最適化はコンパイラ依存
パフォーマンス測定やチューニングは
実際の環境でやらないと
可能性で言えばマクロが一番インライン展開の可能性が高い
(コンパイラが賢すぎて同一コードを共有するとかない限り)
501デフォルトの名無しさん
2020/01/22(水) 10:50:51.03ID:kHABv+Er マクロはソースの字面を読み替えるだけ
機械語の命令シーケンスを開いたサブルーチンにするインライン展開とは全く別な話
機械語の命令シーケンスを開いたサブルーチンにするインライン展開とは全く別な話
502デフォルトの名無しさん
2020/01/22(水) 12:06:37.54ID:OzkwmLpy >>500
マクロは、C言語の時代から「前処理(preprocess)」として処理され、
コンパイル作業が入る前にその場にトークンとして展開されるだけと
仕様で決まっています。勝手に関数になる可能性はほぼ0です。
マクロは、C言語の時代から「前処理(preprocess)」として処理され、
コンパイル作業が入る前にその場にトークンとして展開されるだけと
仕様で決まっています。勝手に関数になる可能性はほぼ0です。
503デフォルトの名無しさん
2020/01/22(水) 12:28:55.61ID:S75Q14iC 挙動が仕様通りになるならコンパイラは何やってもいいんだよ(と仕様で決まってる)
マクロだったものに関数呼び出しを仕込むのもコンパイラの自由だ
実際同じ処理の塊があっちこっちに出てきたらまとめて関数(みたいなもの)にするコードサイズ最適化は普通にやる可能性がある
マクロだったものに関数呼び出しを仕込むのもコンパイラの自由だ
実際同じ処理の塊があっちこっちに出てきたらまとめて関数(みたいなもの)にするコードサイズ最適化は普通にやる可能性がある
504デフォルトの名無しさん
2020/01/22(水) 12:40:53.73ID:Oj6zQLXh505デフォルトの名無しさん
2020/01/22(水) 13:12:02.54ID:kHABv+Er >>504
マクロ展開は最適化が始まる前の話だつってんだよ、わかんねーやつだな
#define a(b,c) b * 2 + c * 2
a(x, y) //これは
x * 2 + y * 2 //こうしろというだけの指示で
(x + y) * 2 //このような変形は意味していないし
してはならない
a(x, y) * z //こういうとき困るだろうが
マクロ展開は最適化が始まる前の話だつってんだよ、わかんねーやつだな
#define a(b,c) b * 2 + c * 2
a(x, y) //これは
x * 2 + y * 2 //こうしろというだけの指示で
(x + y) * 2 //このような変形は意味していないし
してはならない
a(x, y) * z //こういうとき困るだろうが
506デフォルトの名無しさん
2020/01/22(水) 13:18:49.85ID:kHABv+Er インライン展開されるかどうかは、そのコード片がマクロの展開結果かどうかには関係ないってことだぞ
こんなこと、いちいち言わなきゃわからんようだから付け足しておく
こんなこと、いちいち言わなきゃわからんようだから付け足しておく
507デフォルトの名無しさん
2020/01/22(水) 13:34:41.13ID:S75Q14iC >>505
最適化をいつ始めるかなんてそれこそコンパイラ次第なんだけど
最適化をいつ始めるかなんてそれこそコンパイラ次第なんだけど
508デフォルトの名無しさん
2020/01/22(水) 13:41:29.12ID:yb939hMs つまりマクロはインライン展開されやすいという主張は引っ込めるわけだな
509デフォルトの名無しさん
2020/01/22(水) 13:43:39.56ID:yb939hMs 都合悪くなると
どうせいつもの手で逃げるだろうけどな
尻尾巻いたやり取りは残るぜ
どうせいつもの手で逃げるだろうけどな
尻尾巻いたやり取りは残るぜ
510デフォルトの名無しさん
2020/01/22(水) 14:44:17.11ID:54HMiZ6v511デフォルトの名無しさん
2020/01/22(水) 14:49:21.64ID:kHABv+Er512デフォルトの名無しさん
2020/01/22(水) 14:51:21.39ID:54HMiZ6v 意図して出来るのは知ってるが
敢えてやらないんだよ
敢えてやらないんだよ
513デフォルトの名無しさん
2020/01/22(水) 15:11:37.83ID:s6VTVCIo >>499
デバッグのために最適化切ると激遅になる問題が散見されるという問題にたいして
最適化設定を変えるという解がナンセンス
そりゃpragma駆使して手で細かく切り替えりゃ可能だろうがそんなことやってられない
デバッグのために最適化切ると激遅になる問題が散見されるという問題にたいして
最適化設定を変えるという解がナンセンス
そりゃpragma駆使して手で細かく切り替えりゃ可能だろうがそんなことやってられない
514デフォルトの名無しさん
2020/01/22(水) 15:11:48.33ID:kHABv+Er オマエガナー(aary
515デフォルトの名無しさん
2020/01/22(水) 15:13:12.36ID:kHABv+Er >>512
おまえが510で持ち出したような括弧が自動的に付くような規格改定が行われない理由を考えたことがあるか?
おまえが510で持ち出したような括弧が自動的に付くような規格改定が行われない理由を考えたことがあるか?
516デフォルトの名無しさん
2020/01/22(水) 15:13:39.10ID:Oj6zQLXh >>505
多分比較してる内容が噛み合ってない
マクロを展開した結果と直接記述と
が同じなのは当然
プリプロセッサなわけだから
そうじゃなくて
マクロ、インライン関数、通常の関数の比較の話
当然最適化の期待度は
マクロ(直接記述)>インライン関数>通常の関数
多分比較してる内容が噛み合ってない
マクロを展開した結果と直接記述と
が同じなのは当然
プリプロセッサなわけだから
そうじゃなくて
マクロ、インライン関数、通常の関数の比較の話
当然最適化の期待度は
マクロ(直接記述)>インライン関数>通常の関数
517デフォルトの名無しさん
2020/01/22(水) 15:18:02.26ID:Oj6zQLXh518デフォルトの名無しさん
2020/01/22(水) 15:32:14.07ID:s6VTVCIo >>499
ベンダの責任っていうのは一見もっともでそれがまさにc++標準化メンバーのスタンスだ
でも例えばお前はSFINAE関連のデバッグどうやってるよ?
いくつかツールはあるが導入が難しいか頼りないものばかりだ
そんな状況がずっと続いている
このあたりが改善するには言語コアを設計する時点からどんなデバッグ機能が必要か考えるべきってのがおれの主張
作業フローを理解しない人が無邪気にこれが入ればさらにソースコード短く書けまっせレベルの議論で機能追加を考えるべきでない
ベンダの責任っていうのは一見もっともでそれがまさにc++標準化メンバーのスタンスだ
でも例えばお前はSFINAE関連のデバッグどうやってるよ?
いくつかツールはあるが導入が難しいか頼りないものばかりだ
そんな状況がずっと続いている
このあたりが改善するには言語コアを設計する時点からどんなデバッグ機能が必要か考えるべきってのがおれの主張
作業フローを理解しない人が無邪気にこれが入ればさらにソースコード短く書けまっせレベルの議論で機能追加を考えるべきでない
519デフォルトの名無しさん
2020/01/22(水) 15:34:50.28ID:2biZgMt+ 機能を使うかどうかはお前の判断でお前の責任
勝手に機能使っておいて八つ当たりすんな
勝手に機能使っておいて八つ当たりすんな
520デフォルトの名無しさん
2020/01/22(水) 15:50:53.24ID:LkBGzo9o >ほんと標準化プロセスは現実のプロダクト開発に関わったことのない言語オタクの遊び場に見えるわ
+1
+1
521デフォルトの名無しさん
2020/01/22(水) 15:53:26.36ID:2biZgMt+ 江添みたいなのしかいない日本と違って、普通の国の委員は企業の代表として参加しているのでその指摘は的外れ
522デフォルトの名無しさん
2020/01/22(水) 15:57:43.58ID:OzkwmLpy >>503
関数になっているものを inline 展開する処理系は多数ありますが、
プログラマがせっかく展開して書いてあるものをわざわざ関数に戻す処理系
はめったにないのです。
また、そのような最適化は人間には簡単に思えるものですが、機械にやらせようと
するととても大変です。マクロ展開される前のマクロ関数の状態ならまだ
できるのですが、コンパイラの中で最適化層と前処理層がかけ離れた位置に
あるので、もしやりたければ最適化層だけでそれをやることになり処理がとても重くなります。
まず、コンパイル後に出来上がった中間コードのなかから同一のパターンを見出すのが
ものすごく時間が掛かります。それから全く同じではない場合への対処が機会は苦手です。
関数になっているものを inline 展開する処理系は多数ありますが、
プログラマがせっかく展開して書いてあるものをわざわざ関数に戻す処理系
はめったにないのです。
また、そのような最適化は人間には簡単に思えるものですが、機械にやらせようと
するととても大変です。マクロ展開される前のマクロ関数の状態ならまだ
できるのですが、コンパイラの中で最適化層と前処理層がかけ離れた位置に
あるので、もしやりたければ最適化層だけでそれをやることになり処理がとても重くなります。
まず、コンパイル後に出来上がった中間コードのなかから同一のパターンを見出すのが
ものすごく時間が掛かります。それから全く同じではない場合への対処が機会は苦手です。
523デフォルトの名無しさん
2020/01/22(水) 15:57:58.58ID:kHABv+Er >>516
最後の2行とそれ以前が論理的に繋がってないぞ
最後の2行とそれ以前が論理的に繋がってないぞ
524デフォルトの名無しさん
2020/01/22(水) 15:58:35.89ID:kHABv+Er525はちみつ餃子 ◆8X2XSCHEME
2020/01/22(水) 18:28:00.61ID:lnnB9FBg >>516
> 当然最適化の期待度は
> マクロ(直接記述)>インライン関数>通常の関数
現代のコンパイラの最適化機構はかなり複雑で、どのように最適化が効くか予想するのは無理。
素朴な処理系ならなんらかの傾向がある場合もあると思うけど、一般化できるような話ではないよ。
普通の関数はインライン関数より呼び出しのコストは確かに大きいけど、
全体のコードサイズが大きくなるとキャッシュメモリからあふれやすいといった話もあって、
トレードオフになってる要素がある。
それに、主要なコンパイラは inline キーワードで修飾してもしなくてもインライン化が効果的ならインライン化するし、
効果的でないならしないよ。
inline 関数として定義すれば各コンパイル単位の中に必ず定義もあるわけだから、
LTO が有効ではない状況では結果的にインライン化しやすい条件がととのっているとは言えるんだけど、
逆に言えば LTO を有効に出来るならどうでもよくなるわけだし。
いずれにしても、そんな微々たる速度が気になるような場合ってそんなにあるか?
速度が問題になってから実測しろよ。
状況によってどうとでもなるんだから、具体的な状況を示さずにどれが速いとか言ったってかみ合うわけないだろ。
> 当然最適化の期待度は
> マクロ(直接記述)>インライン関数>通常の関数
現代のコンパイラの最適化機構はかなり複雑で、どのように最適化が効くか予想するのは無理。
素朴な処理系ならなんらかの傾向がある場合もあると思うけど、一般化できるような話ではないよ。
普通の関数はインライン関数より呼び出しのコストは確かに大きいけど、
全体のコードサイズが大きくなるとキャッシュメモリからあふれやすいといった話もあって、
トレードオフになってる要素がある。
それに、主要なコンパイラは inline キーワードで修飾してもしなくてもインライン化が効果的ならインライン化するし、
効果的でないならしないよ。
inline 関数として定義すれば各コンパイル単位の中に必ず定義もあるわけだから、
LTO が有効ではない状況では結果的にインライン化しやすい条件がととのっているとは言えるんだけど、
逆に言えば LTO を有効に出来るならどうでもよくなるわけだし。
いずれにしても、そんな微々たる速度が気になるような場合ってそんなにあるか?
速度が問題になってから実測しろよ。
状況によってどうとでもなるんだから、具体的な状況を示さずにどれが速いとか言ったってかみ合うわけないだろ。
526デフォルトの名無しさん
2020/01/22(水) 18:44:11.63ID:0ayd3B3Q >>525
一般的な期待度の話
当然例外はある
コンパイル単位が別で
関数を定数パラメーターでコールした場合
なんかが差が大きくなる
レジスタ退避やスタックポインタのアラインメント調整、スタック拡張、AVXの準備関数コール
もそれなりにオーバーヘッドとなる
同じコンパイル単位であれば
今のコンパイラではそれほど差は出ないが
組み込みのチープなコンパイラもまだまだ使われている
一般的な期待度の話
当然例外はある
コンパイル単位が別で
関数を定数パラメーターでコールした場合
なんかが差が大きくなる
レジスタ退避やスタックポインタのアラインメント調整、スタック拡張、AVXの準備関数コール
もそれなりにオーバーヘッドとなる
同じコンパイル単位であれば
今のコンパイラではそれほど差は出ないが
組み込みのチープなコンパイラもまだまだ使われている
>>501
お前さんは LISP のマクロを知らないのか?
お前さんは LISP のマクロを知らないのか?
528デフォルトの名無しさん
2020/01/22(水) 19:17:53.96ID:2biZgMt+ LISPの仕様がC++と何か関係ある?
529デフォルトの名無しさん
2020/01/22(水) 20:23:02.73ID:OSofFadI 関数とマクロの違いがlispだとわかりやすいから。
わかってないやつをあぶりだすのにはちょうどいい。
わかってないやつをあぶりだすのにはちょうどいい。
530デフォルトの名無しさん
2020/01/22(水) 20:38:48.35ID:F1N+c+gr マクロアセンブラのマクロは強力
531デフォルトの名無しさん
2020/01/22(水) 21:16:42.45ID:kHABv+Er >>527
で?
で?
532デフォルトの名無しさん
2020/01/22(水) 22:55:42.54ID:PNeen3jP LISPじゃー
LISPの場合はー
www
LISPの場合はー
www
533デフォルトの名無しさん
2020/01/22(水) 23:00:35.12ID:Ab6Q02+v QZが現れると大抵話が脱線するから放置しとこう。
534デフォルトの名無しさん
2020/01/23(木) 02:42:18.33ID:96Ez/jHv535デフォルトの名無しさん
2020/01/23(木) 05:39:34.44ID:ZM0XhcNb (CMakeスレがないっぽいので)
target_link_libraries(a.exe PRIVATE ${MPI_CXX_LIBRARIES})
↑${MPI_CXX_LIBRARIES}が定義されていなくても合法で、その場合何ともリンクしないということを期待してもOK?
それとも
if(MPI_FOUND) target_link_libraries(...) endif()
とすべき?
公式を見てもよく分からない
target_link_libraries(a.exe PRIVATE ${MPI_CXX_LIBRARIES})
↑${MPI_CXX_LIBRARIES}が定義されていなくても合法で、その場合何ともリンクしないということを期待してもOK?
それとも
if(MPI_FOUND) target_link_libraries(...) endif()
とすべき?
公式を見てもよく分からない
536デフォルトの名無しさん
2020/01/23(木) 07:08:06.76ID:Y+bt1zIi537デフォルトの名無しさん
2020/01/23(木) 09:24:40.33ID:cHzm9I9L >>534
デバッグに配慮してたらそんな糞機能入れないだろうね。
デバッグに配慮してたらそんな糞機能入れないだろうね。
538デフォルトの名無しさん
2020/01/23(木) 10:15:54.39ID:77XEoAHk 今日もgotoを使ってしまった・・・
539デフォルトの名無しさん
2020/01/23(木) 10:22:15.42ID:KV664nBl >>534
まず現在の問題の構造を考えて欲しい
c++はtemplateを使ってメタプログラミングを行うのはご存知の通り
でtemplateはチューリング完全だ
それだけの複雑さを持っている
それに対して一般人がやるデバッグはコンパイルが通って期待通り動くかエラーメッセージを見るかぐらいだろ?
これは原始的なprintfデバッグを行っているのと同じレベル
なのでまずストレートに考えると
メタプログラミングの結果が取得できること
コンパイラにデバッガ接続可能にしてメタプログラミングの実行がトレースできること
が必要
これがベストなのかはさておき、メタでないプログラミングでは当たり前なんだから
SFINAEをどうするかみたいな話の前にまずこういうところを整備すべきだった
ハードウェア依存じゃないのだから標準モデルを定めるのは可能だ
まず現在の問題の構造を考えて欲しい
c++はtemplateを使ってメタプログラミングを行うのはご存知の通り
でtemplateはチューリング完全だ
それだけの複雑さを持っている
それに対して一般人がやるデバッグはコンパイルが通って期待通り動くかエラーメッセージを見るかぐらいだろ?
これは原始的なprintfデバッグを行っているのと同じレベル
なのでまずストレートに考えると
メタプログラミングの結果が取得できること
コンパイラにデバッガ接続可能にしてメタプログラミングの実行がトレースできること
が必要
これがベストなのかはさておき、メタでないプログラミングでは当たり前なんだから
SFINAEをどうするかみたいな話の前にまずこういうところを整備すべきだった
ハードウェア依存じゃないのだから標準モデルを定めるのは可能だ
540デフォルトの名無しさん
2020/01/23(木) 10:45:58.41ID:77XEoAHk gotoを受け入れるとクリーンでわかりやすい実装が開ける。
・・・かもしれない。
・・・かもしれない。
541デフォルトの名無しさん
2020/01/23(木) 10:47:36.57ID:96Ez/jHv >>539
> メタプログラミングの結果が取得できること
> コンパイラにデバッガ接続可能にしてメタプログラミングの実行がトレースできること
> が必要
あったらいいなとは思うけど、必要(=可能になるまで機能を使わせるべきではない)とは思わないなぁ。
実行時プログラムについて言語規格側でデバッグのための特別な「標準モデル」が定められたりいてないけど、
現状でわりと使えるデバッガができてるし、コンパイラはあるけどデバッガは無いという環境や時代はあったし。
メタプログラミングだからといって機能追加に先立って特別な定めが要るという理屈はよくわからない。
> メタプログラミングの結果が取得できること
> コンパイラにデバッガ接続可能にしてメタプログラミングの実行がトレースできること
> が必要
あったらいいなとは思うけど、必要(=可能になるまで機能を使わせるべきではない)とは思わないなぁ。
実行時プログラムについて言語規格側でデバッグのための特別な「標準モデル」が定められたりいてないけど、
現状でわりと使えるデバッガができてるし、コンパイラはあるけどデバッガは無いという環境や時代はあったし。
メタプログラミングだからといって機能追加に先立って特別な定めが要るという理屈はよくわからない。
542デフォルトの名無しさん
2020/01/23(木) 11:24:46.56ID:Y+bt1zIi543デフォルトの名無しさん
2020/01/23(木) 11:27:54.87ID:y5HKK+ir constexpr関数内でgoto使えないのだから、gotoを避けることを目的とせざるを得ない場面はある。
544デフォルトの名無しさん
2020/01/23(木) 11:28:08.58ID:77XEoAHk breakとgotoを同一視するのも問題なのでは。
545デフォルトの名無しさん
2020/01/23(木) 11:28:57.23ID:Y+bt1zIi >>544
同一視ってGOTO有害説の中では完全に同じだよ
同一視ってGOTO有害説の中では完全に同じだよ
546デフォルトの名無しさん
2020/01/23(木) 11:31:15.88ID:y5HKK+ir goto有害説ではbreakとgotoは違うもの扱いしているよ
breakで出来ないことがgotoで出来ること自体を問題視しているのだから
breakで出来ないことがgotoで出来ること自体を問題視しているのだから
547デフォルトの名無しさん
2020/01/23(木) 11:31:46.35ID:77XEoAHk 誰かそんな説を唱えたのでしょうか。
548デフォルトの名無しさん
2020/01/23(木) 11:32:55.49ID:77XEoAHk 責任者出て来ーーい!!!
549デフォルトの名無しさん
2020/01/23(木) 11:33:01.12ID:Y+bt1zIi >>546
ほう、どう違う扱いをしているんだ?
ほう、どう違う扱いをしているんだ?
550デフォルトの名無しさん
2020/01/23(木) 11:34:43.98ID:y5HKK+ir gotoは使わないけどbreakは使うってのがgoto有害説じゃないの?
完全に別の扱いしているってことだろ
完全に別の扱いしているってことだろ
551デフォルトの名無しさん
2020/01/23(木) 11:35:44.43ID:77XEoAHk ぐ、ぐ、ぐぅの音も出ない。
552デフォルトの名無しさん
2020/01/23(木) 11:42:15.74ID:Y+bt1zIi553デフォルトの名無しさん
2020/01/23(木) 12:29:41.71ID:nmx8CMX3554デフォルトの名無しさん
2020/01/23(木) 13:56:33.40ID:VWfJLmDE555はちみつ餃子 ◆8X2XSCHEME
2020/01/23(木) 14:47:05.73ID:QRqIx1i6 break でも goto でもそれを使わなかったときにもっと複雑になるのなら使っていいよ。
クソみてぇなフラグを立ててループから抜けるよりは break の方がマシだろ?
使わなくても十分に良いなら使わない方がいいに決まってるけど、要るときに使わないのは馬鹿げた話。
現実にはクソな道具が役に立つクソな状況があるんだよ。
クソみてぇなフラグを立ててループから抜けるよりは break の方がマシだろ?
使わなくても十分に良いなら使わない方がいいに決まってるけど、要るときに使わないのは馬鹿げた話。
現実にはクソな道具が役に立つクソな状況があるんだよ。
556デフォルトの名無しさん
2020/01/23(木) 15:47:36.48ID:tCbubFOj do{...}while(0);
とかにしたくないとき
while(1){
...;
...;
break;
}
もたまに意図的に使う
とかにしたくないとき
while(1){
...;
...;
break;
}
もたまに意図的に使う
557デフォルトの名無しさん
2020/01/23(木) 16:22:12.67ID:77XEoAHk なにこれ悪行自慢。
558デフォルトの名無しさん
2020/01/23(木) 16:34:07.41ID:Y+bt1zIi >>556
breakしなかった場合の動作が違うじゃねえかよ
breakしなかった場合の動作が違うじゃねえかよ
559デフォルトの名無しさん
2020/01/23(木) 16:47:49.33ID:nmx8CMX3560デフォルトの名無しさん
2020/01/23(木) 16:49:27.20ID:77XEoAHk 通報しました。
561デフォルトの名無しさん
2020/01/23(木) 17:36:57.81ID:y5HKK+ir forやwhileもgotoのシンタックスシュガーだから使うなみたいな
562デフォルトの名無しさん
2020/01/23(木) 17:43:18.63ID:y5HKK+ir gotoって自由すぎて対応するlabelの場所によって意味が変わるから、自由に飛びたいとき以外に使うと分かりづらくなる。
breakやcontinueなら一連の処理の一部を飛ばすって意図がそれだけでわかるのだから、do{}while(0)だとgoto使うのと何を分かりやすくするかでトレードオフになる
breakやcontinueなら一連の処理の一部を飛ばすって意図がそれだけでわかるのだから、do{}while(0)だとgoto使うのと何を分かりやすくするかでトレードオフになる
563デフォルトの名無しさん
2020/01/23(木) 17:47:15.54ID:Y+bt1zIi do{} から以後が、それまでの話と繋がってねえぞ
それから break と continue のGOTO有害説における違いもわかってねえな
それから break と continue のGOTO有害説における違いもわかってねえな
564デフォルトの名無しさん
2020/01/23(木) 17:51:51.72ID:y5HKK+ir do while(0)+breakを使う->loopだと誤解する可能性がある
gotoを使う->labelの飛び先見ないと意図がわからない
ってどちらの分かりづらさを大きな問題とするかで、どちらが良いかの好みが別れる
これがトレードオフ
gotoを使う->labelの飛び先見ないと意図がわからない
ってどちらの分かりづらさを大きな問題とするかで、どちらが良いかの好みが別れる
これがトレードオフ
565デフォルトの名無しさん
2020/01/23(木) 17:53:42.62ID:y5HKK+ir まあdo while(0)と組み合わせるならcontinueの方が良い気もする
やっぱりretryしようと思ったときのために
やっぱりretryしようと思ったときのために
566デフォルトの名無しさん
2020/01/23(木) 18:00:56.01ID:AdSJ3UeH >>562
C++自体自由過ぎるから使わない方が良いぞ
C++自体自由過ぎるから使わない方が良いぞ
567デフォルトの名無しさん
2020/01/23(木) 18:04:36.92ID:y5HKK+ir 自由だから使い所はその自由度が必要なときってだけなのだが。
forのかわりにgotoでループさせる奴は正気じゃない
forのかわりにgotoでループさせる奴は正気じゃない
568デフォルトの名無しさん
2020/01/23(木) 18:12:02.33ID:AdSJ3UeH 関数もどこに飛ぶかわからないから
使いどころは必要な時だけだな
ポインタも同じ
使いどころは必要な時だけだな
ポインタも同じ
569デフォルトの名無しさん
2020/01/23(木) 18:52:22.63ID:77XEoAHk 関数はgotoと同じ。
570デフォルトの名無しさん
2020/01/23(木) 19:01:50.07ID:77XEoAHk >>566
やはりこれからはRustですか。
やはりこれからはRustですか。
571デフォルトの名無しさん
2020/01/23(木) 19:09:24.45ID:nmx8CMX3572デフォルトの名無しさん
2020/01/23(木) 19:19:26.28ID:5iKgMbK4573デフォルトの名無しさん
2020/01/23(木) 19:21:21.59ID:5iKgMbK4574デフォルトの名無しさん
2020/01/23(木) 19:22:06.67ID:77XEoAHk goto駆使してcoroutineというパターンは。
575デフォルトの名無しさん
2020/01/23(木) 19:22:49.44ID:nmx8CMX3 ループする気がないのにcontinueが入る可能性があるのか?
やっぱループ構文をループ以外の目的で使う奴はアホだわ
やっぱループ構文をループ以外の目的で使う奴はアホだわ
576デフォルトの名無しさん
2020/01/23(木) 19:23:30.77ID:5iKgMbK4577デフォルトの名無しさん
2020/01/23(木) 19:27:33.29ID:77XEoAHk >>552が答えを書かないのだが。
もしかして答えなんて持っていないのでは。
もしかして答えなんて持っていないのでは。
578デフォルトの名無しさん
2020/01/23(木) 19:32:56.95ID:rYLpH2kU function();
何をするかわからないから関数は使うべきじゃない
pointer;
何を指し示すかわからないからポインタは使うべきじゃない
何をするかわからないから関数は使うべきじゃない
pointer;
何を指し示すかわからないからポインタは使うべきじゃない
579デフォルトの名無しさん
2020/01/23(木) 19:36:22.66ID:5iKgMbK4 >>565 に聴いてくれ
580デフォルトの名無しさん
2020/01/23(木) 20:36:00.34ID:Y+bt1zIi581デフォルトの名無しさん
2020/01/23(木) 22:32:03.65ID:bkVRGJlU582デフォルトの名無しさん
2020/01/23(木) 22:33:01.52ID:glYn/cGw つまりCPUはgotoの嵐だからクソと
583デフォルトの名無しさん
2020/01/23(木) 22:54:05.78ID:nX/KPrtD584デフォルトの名無しさん
2020/01/23(木) 23:13:19.41ID:HgduJel4 gotoは高級の中にいきなり低級なことぶちこむから違和感あるんだろ
場当たり的で美しくないね
場当たり的で美しくないね
585デフォルトの名無しさん
2020/01/23(木) 23:28:17.91ID:2vcw1hg/ まえにSQLパーサを書いたときはgotoがすごく便利だった。
文法をそのままソースに反映できる感じ。
goto嫌いな人たちはどうやって書くのか見てみたい。
文法をそのままソースに反映できる感じ。
goto嫌いな人たちはどうやって書くのか見てみたい。
586デフォルトの名無しさん
2020/01/23(木) 23:35:42.82ID:M8BvdbFC そういえば、まだ構造化されてない昔のBASICは、構造化された今のBASICより人気があったのではないかと思うけど、行番号と goto 文の組み合わせはラベル名を考えなくて済むので便利であった。
そして、BASIC言語は分かり易くて易しい言語と言われていたのだから、goto文自体はそんなに理解や扱いが難しいものではない。
ただし、フローチャートを書いてから組まないと分かりにくいことがあったかも知れない。
逆に、今フローチャートを書く必要がある場面は少なくなったのはgoto分を使わずに書けるようになったからかも知れない。
そして、BASIC言語は分かり易くて易しい言語と言われていたのだから、goto文自体はそんなに理解や扱いが難しいものではない。
ただし、フローチャートを書いてから組まないと分かりにくいことがあったかも知れない。
逆に、今フローチャートを書く必要がある場面は少なくなったのはgoto分を使わずに書けるようになったからかも知れない。
587デフォルトの名無しさん
2020/01/23(木) 23:41:23.96ID:cHzm9I9L ここまで無理やりな擁護してまで使うほどの機能じゃねーだろバカか。
588デフォルトの名無しさん
2020/01/23(木) 23:43:47.47ID:LWLbtpQ/ gotoとかマクロとか話題に加齢臭漂ってるぞ
もうちょっと食いつく話題選べよ
もうちょっと食いつく話題選べよ
589デフォルトの名無しさん
2020/01/24(金) 00:03:07.60ID:M35o3kEk >>585
普通にテーブル駆動では。
普通にテーブル駆動では。
590デフォルトの名無しさん
2020/01/24(金) 01:08:48.99ID:nZbbrzXe main関数が呼び出される前にグローバル変数が初期化されますが、
これの初期化順を変更することは可能なのでしょうか?
これの初期化順を変更することは可能なのでしょうか?
591デフォルトの名無しさん
2020/01/24(金) 01:09:21.02ID:/4mdgZLq A、B、Cと言う順序で実行されるべき処理が
A、B、Cと言う順序で実行されれば良いのであって
それが上からA、B、Cの順で書いてあろうが
B, A, Cと書いてあるのをgotoでA、B、Cの実行順にしようが
スレッド1、2、3が同期をとりあってそれぞれA、B、Cの順で実行しようが
相違なるコールバック1、2、3がこの順で呼ばれるように仕組まれた上でそれぞれA、B、Cを実行しようが
B、Cの実行がラムダ式で書かれていてその定義がAより上にあってAの実行後に呼び出されようが
ぜんぜん問題ではない
A、B、Cと言う順序で実行されれば良いのであって
それが上からA、B、Cの順で書いてあろうが
B, A, Cと書いてあるのをgotoでA、B、Cの実行順にしようが
スレッド1、2、3が同期をとりあってそれぞれA、B、Cの順で実行しようが
相違なるコールバック1、2、3がこの順で呼ばれるように仕組まれた上でそれぞれA、B、Cを実行しようが
B、Cの実行がラムダ式で書かれていてその定義がAより上にあってAの実行後に呼び出されようが
ぜんぜん問題ではない
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 高市首相答弁を“引き出した”立民・岡田克也氏が改めて説明「なぜ慎重な答弁をされなかったのか。非常に残念に思っている」 ★9 [ぐれ★]
- 【国際】ロシアはすでに戦争準備段階――ポーランド軍トップが警告 [ぐれ★]
- 【野球】大谷翔平、佐々木朗希、山本由伸らがWBC辞退なら広がる不協和音… 『過去イチ盛り上がらない大会』になる可能性も★2 [冬月記者★]
- 【国際】ロシアはすでに戦争準備段階――ポーランド軍トップが警告 ★2 [ぐれ★]
- 【news23】小川彩佳アナ「ここまでの広がりになるということを、高市総理はどれだけ想像できていたんでしょうね」 日中問題特集で [冬月記者★]
- 「町中華」の“息切れ倒産”が増加 ブームにも支えられ職人技で踏ん張ってきたが… 大手チェーンは値上げでも絶好調 [ぐれ★]
- ㊗157円 [194819832]
- 【高市売り】円安、止まらず!凄い勢いで暴落中。157円へ [219241683]
- 【疑問】国政選挙義務投票制議論ってなんで無いの?
- なんだかんだドラクエはまだ面白い。FFはオワコン
- B型のハゲが一番ヤバイ
- 実写版ゼルダの伝説、イメージが公開。パヨモメンがなぜ黒人じゃないのかと怒り😡白人ガー [776365898]
