C++相談室 part138

レス数が900を超えています。1000を超えると表示できなくなるよ。
1デフォルトの名無しさん (スフッ Sd9f-fGne)
垢版 |
2018/08/05(日) 18:02:36.57ID:DigzqJtZd
次スレを立てる時は本文の1行目に以下を追加して下さい。
!extend:on:vvvvv:1000:512

C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

前スレ
C++相談室 part137
http://mevius.5ch.net/test/read.cgi/tech/1531558382/

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.103【環境依存OK】
http://mevius.5ch.net/test/read.cgi/tech/1530384293/

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

[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
2019/12/14(土) 12:40:35.62ID:x6gTDhtk0
>>824,825
なるほど、提案しろと言うのはごもっともだ。
しかし俺は仕様を提案するほどには仕様に詳しくないからパスだな。
そして確かに同様の人が多いというのは認める。


>>829
それは俺も以前考えた。
Cのマクロはそこでしかパース出来ないので、前に出す事が出来ず、限界がある。
(例えばdo-whileブロック内のflag宣言をwhileよりも前に出すことができない)
そしてそれでも無理矢理やるならいっそのことPython等での自前パーサを先に通すほうがまし、という結論に達した。
そして一部それを既にやっている。
(俺は使ってないが)何だかんだでmakefileが融通が利くのはこういう点でもある。
そして自前パーサで全く別のように見える記述になってきたら、新言語の完成、というわけだ。
C++も同様だったと聞いているし。
831デフォルトの名無しさん (ワイーワ2 FFfa-EbeN)
垢版 |
2019/12/14(土) 14:15:29.43ID:TlZt0biiF
switch(hoge){
case HAGE: do{}while(0); break;
case FUGA: do{}while(0); break;
default: do{}while(0); break;
}
マクロにするとスコープ問題も解決するしbreak書き忘れも無くなる
832デフォルトの名無しさん (ワイーワ2 FFfa-EbeN)
垢版 |
2019/12/14(土) 14:16:22.48ID:TlZt0biiF
>>830
QTもその延長にある希ガス
2019/12/14(土) 14:25:44.80ID:bUVFbQd10
int a = 0;
do {
int a = 1;
} while (a);

このコードの挙動が変わってしまうから直せないと思う
2019/12/14(土) 14:30:23.06ID:z3Vs03gF0
>>830
マジレスされるとは思わなかったけど例えばこんなのとか。C FAQでヤメロと言われてるような。

#define SCOPED_DO(VARS) for(;;) { VARS;
#define SCOPED_WHILE(COND) if(COND) continue; break;}

SCOPED_DO(int i;)
:
SCOPED_WHILE(i<10);
2019/12/14(土) 14:34:41.93ID:JwYnIOEad
ああ、確かにやめた方が良い
2019/12/14(土) 16:21:38.04ID:x6gTDhtk0
>>831
すまんがそのコードの意味はよく分からない。


>>834
それはマクロにすることが目的で、見やすいコードを書こうとしていないので、
FAQでなくても止めろと言われて当然だ。
マクロも当然ながら見てすぐ分からないといけない。
この意味ではlinuxのコードが参考になるだろう。
小文字マクロが大量に使われていて、それでも何とかなってる。
逆に言えば、小文字マクロ=関数だと勘違いしても問題ない範囲で使え、ということだ。
どう変換されるかぱっと分からないマクロは逆に読みづらくなる。

ただまあ、ifとswitchの取り扱いからすると、
C: for文が例外で、他は{}がスコープ
C++: do-while文が例外で、スコープを開始出来るキーワード(for/switch/if)ではキーワード部分までスコープに含める
という状況なので、do-whileのスコープも拡張されるのは時間の問題だとも思うが。
2019/12/14(土) 16:52:48.59ID:PwUHvw+y0
みんなわかってることを長々書く人
do-whileもかなりどうでもいい
気分だけの問題でそんなとこで困ったこと一度もない
2019/12/14(土) 19:17:52.66ID:x6gTDhtk0
>>837
ゆとり死ね

> みんなわかってることを長々書く人
何度も言っているが、お前らゆとりが駄目なのはそういうところだ。
ここで話すのに「俺の人格」なんて全く関係ないし、実際今のところ気にしてた奴なんていないだろ。
お前以外は全員、技術面にフォーカス出来ている。

ゆとりが駄目なのは、結局、こうやって場を一々ぶち壊していくことだ。
結果、ゆとりゴキブリが一匹でも入り込める場は全部ぶち壊されていく。
その結果、ゆとり自身の居場所が無くなっているというのが、現在のお前らを取り巻く状況だ。

お前らゆとりはネット上では何を言ってもいい、何をやってもいいと勘違いしている。
そうじゃない。
自由に意見は言っていいが、コミュニティに対する破壊活動は許容されない。
そしてお前らは何がそれに該当するのかさっぱり理解出来ていない。
しかしお前らはネット慣れしていると勘違いしているからかそれを認めることすら出来ない。
お前らは本当に救いようがない。

おそらくはネットが出現することによって、リアルが希薄になり、
結果、リアルでのコミュニティ(人間関係)を構築することが不得手になっている。
しかしそれは当然ネット上にも適用/応用出来るものであり、結果、ゆとりはコミュ障となっている。
ところがゆとりは誰かがネット上で形成したコミュニティにただ乗りして来れているから、その問題にも気づけない。
それが「コミュ力」とか言われた問題の本質だよ。
それ以前の世代では否応なしに必要とされた最低限の「コミュ力」がゆとりにはない。
(ただしこの意味ではコミュ障害でも生きていける社会に改善された、と考えることも出来るが)

お前の発言によって、コミュニティがどう動くか、少しは考えてから物を言え。
そうじゃないからお前らゆとりはお前ら自身で形成したコミュニティを持てないんだよ。
それにすら気づけないのだろうけど。
2019/12/14(土) 19:23:47.82ID:sa3jv1WG0
くっさ
2019/12/14(土) 19:42:59.23ID:JneJDC0D0
>>808
言いたいことはわかる
do {} 内のスコープを後に続く while() の条件式にまで拡張すればいいだけだからそんなに無理なくできそうな気がするんだけどね
2019/12/14(土) 20:47:22.30ID:x6gTDhtk0
>>840
StackOverflowの質問の筆者もそうだが、技術的にはやれば出来る程度の問題のはず。
あとは言語としての一貫性(={}をスコープとする)をどこまで厳密に適用するかだ。
ただ俺はこれがおかしな仕様のまま残されていることが奇妙だと思っている。
Cはほぼ変化する気がないからともかくとして、
Cの駄目なところを改善している他の新しい言語(C#等)でもそのままなのに驚いた。
ただ、ifやswitchまで拡張されたのなら、whileもそうだな。

現行
String^ line;
while ((line = sr->Readline())!=nullptr) {
...
}

次?(もしかして今ももう出来る?)
while ((String^ line = sr->Readline())!=nullptr) {
...
}

駄目だ駄目だと言われている条件式内での代入も、カンマ演算子も、上手く使えば美しく書けることに気づいた。
そして駄目だと言われているのは「白黒端末」前提であり、実は
「条件式内で代入演算子を用いた場合、太字にする」とかIDEのサポートがあれば問題ない気がしてきている。
つまりは、見た目気づきにくいから駄目なだけであって、見りゃ分かる、なら問題ないからだ。
だからコーディングルールもカラー端末大画面前提でのルールに変えていくべきなんだよな、とも。
2019/12/14(土) 22:59:30.18ID:Gc3Mkypl0
{do{}while(cond);}
2019/12/15(日) 00:28:30.20ID:gPzjm6+r0
>>837
ID:x6gTDhtk0は、ほぼ確実にMIPS君だろw

>自由に意見は言っていいが、コミュニティに対する破壊活動は許容されない。
>そしてお前らは何がそれに該当するのかさっぱり理解出来ていない。

>お前の発言によって、コミュニティがどう動くか、少しは考えてから物を言え。
この前キャリーフラグに関する間違い指摘されたら、100レス以上暴れたのはどこのどいつだよw
2019/12/15(日) 08:16:45.70ID:TpJAGc8G0
>>843
ゆとり死ね

というか、ゆとりは認めないが、ゆとりの識別能力は恐ろしく低い。
単に「長文である」とか、そういう外面的な情報しか見えてないからだ。
結局これは、いわゆる「コミュ能力」が低いからであって、つまりは相手が見えてないからだ。
当たり前だがネット上でも相手は人間、リアルのコミュ能力が低ければネットでも低くなる。
(ただしリアルとはチューニングがかなり異なるので、
リアルでコミュ力高くてもネット慣れもしてないとちぐはぐな対応になってしまうが)
「空気読め」というのも、逆に言えば、
それまでの奴らは「空気読め」と言われるほど酷い発言/行動はしなかったんだよ。
良いか悪いかはさておき、「○○さんに対してそれはねーわ」が完全に共有されてた。
(ただしこれは本当に悪い側面も持つので、これ自体が破壊されたのは悪くはないかもしれない)
それをゆとりが出てきたおかげで、「空気読め」と言われだした。
そして雰囲気だけで無理強いする奴がそれを濫用し始めておかしな事になってるのが今だ。

お前らはその識別能力の低さを自覚した方がいい。
ゆとり以前の世代はこの自覚があるから、ゆとりレベルでトンチンカンな発言はしない。
俺はその話は知らないし、本来は一々否定することも面倒だからしないが、
いい加減ゆとりにはうんざりしているので、
「どうしてゆとりを排除しなければならないか」を蕩々と述べ、認識を共有することをまず始めることにした。
現状はそこから始めないと駄目だ、というのが俺の認識だ。
どれだけ新しいスレを作っても、良くなってきたらゆとりに破壊されるのを既に何度も繰り返してきたからだ。

ただ、おそらく、ネットを「正しく使える奴」と「間違った使い方しか出来ない奴」に強烈に分化しているのが現状だと思う。
「間違った使い方しか出来てない」奴は、本当によく考えた方がいい。
そして「『間違った使い方しか出来てない』奴(≒」ゆとり)はコミュニティに不要」と
認識を共有した者同士で脱皮しようと言うわけだ。これは既に述べたとおり。

ゆとりは俺を気に入らないようだが、実際、ここに投稿してもすぐにレスが付くだろ。
それは、お前とは違って、「まだこのスレも読む価値がある」と認めている奴も多い、ってことなんだよ。
2019/12/15(日) 10:15:43.33ID:7Mmj/dyw0
相手に伝えたいことを簡潔に表現する能力がない無能なんだから許してやれよw
2019/12/15(日) 10:22:17.71ID:pyIDDya4a
これだから老害はダメ。
2019/12/15(日) 11:27:27.58ID:Q+saMC6e0
https://eigo-box.jp/others/jokes/#idiot
これを地で行くやつw
2019/12/15(日) 11:28:04.52ID:Q+saMC6e0
しくった
https://eigo-box.jp/others/jokes/#9_idiot
2019/12/15(日) 11:39:59.90ID:TpJAGc8G0
>>845-848
ゆとり死ね

一行しか理解出来ないゆとりにはこれがもっとも適切な表現だ。
常に最初に書いて置いたその意味もお前らには理解出来なかったようだが。
2019/12/15(日) 11:51:44.14ID:PfQY9kAx0
鬱積したもんがあるんだろうね
ここに渾身の長文書いたら皆が読んで敵は打ちひしがれ、味方は共感してくれると思ってるところが
こいつのかわいいところであり、哀れであるところ
2019/12/15(日) 11:57:15.36ID:Q+saMC6e0
>>850
www
2019/12/15(日) 13:08:21.74ID:TpJAGc8G0
>>850-851
ゆとり死ね

お前らにとって理解不能でも、意味があることはあるんだよ。
何故お前らゆとりがそこまで傲慢なのか俺には分からないが。
2019/12/15(日) 13:16:19.97ID:Q+saMC6e0
その「意味があること」とやらを、おまえさんは伝えたいのか?
伝えたいのに伝わらないという問題に直面したとき
どうすれば伝わるか考えるという科学はしているのか?
2019/12/15(日) 13:18:32.30ID:K1ul1r/C0
>>852
相手がゆとり世代かどうかも分からないのにそう決めつけたり、ゆとり世代というレッテルで一括りにしたり、非論理的な主張をするお前も無能だろう
2019/12/15(日) 14:31:16.94ID:TpJAGc8G0
>>853-854
ゆとり死ね

そう思うならそれでいい。
俺の文がお前ら宛だと思っているのはお前らの勘違いでしかない。
俺は今ここを読んでいるが特に文句を言ってない連中、或いは将来的にここを読む奴宛に書いている。
彼等がどう思うかだよ。

ワッチョイ確認すれば分かるが、
実際、今回技術面にフォーカスしてきちんと議論出来ている人は、誰一人として文句を言ってないだろ。
一方、お前らゆとりは文句しか言ってない。
これが、既に言った、「正しく使える奴」と「間違った使い方しか出来ない奴」(≒ゆとり)の差だよ。

本来、コミュニティに対して生産的でない奴には発言権もないべきなんだよ。
それはリアルでは当然そうなっていて、会社で無能に発言権がないのもこれでしかない。
ところがネットではゆとりみたいなクズでもどのコミュニティに対しても自由に参加出来るものだから、
お前らゆとりはそういうものだと勘違いしてしまっている。
結果、お前らゆとり自体が本質的にクズ人間集団のように以前の世代から見たら思えてしまう。
これがゆとり問題の根元だよ。
そして問題は、このことを、お前らゆとりも、また、以前の世代も、意識出来ていないことだ。

ここがC++技術のスレなら、最低限、C++技術に関しての発言をする/した奴にしか発言権はない。
俺に文句を言う前に、お前らが何らかの「スレを盛り上げる為のC++技術論」を展開して、
コミュニティに対して生産的に寄与してからでないと、発言権はないんだ。
これは本当に当たり前のことなんだよ。
(というか、そうしないとコミュニティが崩壊して存続出来ないから、
存在しているコミュニティは本質的にそういうものとなる)
ゆとりでも分かるように言えば、リアルでシカトされるような行動/発言はネットでも慎むべきなんだよ。
まあもっとも、お前らゆとりはリアルでも「ないわ〜」な行動をしてブッ叩かれていたわけだが。

再度言うが、文句を言う前に何か他人を巻き込んで盛り上がるC++技術論を展開しろ。
そして俺にマウント取りたいのならC++技術論で来い。
2019/12/15(日) 14:35:38.91ID:EeC59mXxa
箇条書きできない人ってそんなに珍しくないと思うよ
2019/12/15(日) 16:28:15.78ID:TpJAGc8G0
>>856
違うぞ。俺は単に言いたいことが多いだけだ。
それは見えている物がお前らより多いからだ。

そしてそれは既に言ったが「知識のネットワーク化」により、全部関連してるからだ。
何度も繰り返したように、これは見えた展開でしかない。
お前らはどうやら無限にこれを繰り返す気らしいが、俺はもうそろそろ終止符を打ちたいので、
俺の思想を開示し、賛同者を募っている。

プログラミングもそうだが、こういった展開も実は抽象化出来る。
お前らは文系脳だからそういう感覚すらないようだが。
今やっていることは「海と山が近い町での漁師と農民の喧嘩」でしかなく、リアルでも1000年以上繰り返してきてる。
それをお前ら文系は別々のこととして暗記するから駄目なんだ。
まあもういいが。
2019/12/15(日) 16:34:06.95ID:TpJAGc8G0
>>856
ゆとり死ね

言い忘れてたので言っとく。
>>720が俺が箇条書きしたものだ。
ゆとり馬鹿以外に箇条書き出来ない奴がいると思っているのはゆとりすぎる。
2019/12/15(日) 16:37:54.83ID:01f7hQnX0
科学しねえサルであることはわかった
あばよエテ公
2019/12/15(日) 16:45:25.74ID:nhcuVJi80
そのための隔離スレ
861デフォルトの名無しさん (ワイーワ2 FFfa-EbeN)
垢版 |
2019/12/15(日) 16:51:02.24ID:NIombkpjF
円周率はなぜπなのですか
2019/12/15(日) 17:12:06.27ID:K1ul1r/C0
>>860
隔離スレから出てこないところだけは評価してもよいと思う。
2019/12/15(日) 17:18:40.06ID:hicN34V00
>>833 の指摘が簡潔で十分に説得的だと思う。

C++の人は何故こんなに互いに罵り合うのだろう。
それも技術的な妥当性などより先に人格や経歴を否定するような表現を使って。
2019/12/15(日) 18:07:39.62ID:TpJAGc8G0
>>863
>>833については広義に捕らえればifやswitchでも発生することだし、
それ以前にC++は駄目な仕様は互換性が無くなっても改善して行ってる。
一応はいまだに「完璧な言語」を目指している。


> C++の人は何故こんなに互いに罵り合うのだろう。
C++だけの問題ではないと思うが、お前の言う「罵りあってない言語スレ」ってどこよ?
あと、揚げ足取り気味だが、
> 経歴を否定
してる奴は俺含めて誰も居ないと思うが?
2019/12/15(日) 18:22:34.11ID:fGq+HT2S0
仕様変えろって言ってたのは do ~ while の話なのになんで if や switch が関係ある?
なにか話が通じてないっぽい。
2019/12/15(日) 18:43:08.65ID:TpJAGc8G0
>>865
話が通じてないのはお前だ馬鹿タレ。

スコープの拡張によってdo-whileは従来コードと動作が変わってしまうので採用出来ない、というのなら、
if文もスコープの拡張によって従来コードとは動作が変わってしまっているし、switch文もそうだ。
だから、do-while文が従来コードと動作が変わってしまうから仕様の変更が出来ない、ということはない。

つか、お前ら馬鹿には短く書いたら通じないのに、
一々お前ら馬鹿にも分かるように説明してやると長いと文句を言うという。
だからお前らとはコミュニヶーション無理なんだよ。
2019/12/15(日) 18:43:53.57ID:5sPbacoo0
今あるdo whileの挙動が変わるような仕様に変える事なんて出来ないよ

仕様追加なら>>812が良い
ループ変数もローカルで定義出来る
2019/12/15(日) 18:59:11.49ID:TpJAGc8G0
>>867
812は使えない。

(そもそもほぼ使われてないというのはさておき)
・do-whileの場合は、最初に条件変数を確定させることが出来ない場合が多い
・宣言だけdo内で出来ても余計に見にくくなるだけ、それなら{}内でいい

ただしifやswitchのように「変数スコープを汚さない」為ならこの仕様でもいい。
だから俺は賛成はしないが、実際に提案したら通るかもしれない、とは思う。
なお本来こういうのはRsustの出番だが、
今見たところRustもwhileのスコープはCと同様のようだ。
https://doc.rust-jp.rs/the-rust-programming-language-ja/1.6/book/loops.html
2019/12/15(日) 19:13:29.02ID:gCPcwtH+0
>>817
私は for(;;) { }
を愛用しています
2019/12/15(日) 19:54:31.00ID:5sPbacoo0
>>868
for と比べても一貫性があるし
過去コードにも影響を与えない

より良い案があるなら書いてみれば?
2019/12/15(日) 19:57:40.04ID:5sPbacoo0
>>817
意味的には
while (TRUE)
なんだけど
なぜかみんな1だよね

1の方が楽だから?
それともTRUEが定義されてないことまで考えて?

既に定型文だからこのままで良いけど
2019/12/15(日) 19:59:26.20ID:5sPbacoo0
#define ever (;;)

for ever {
}

こんなネタがあった
2019/12/15(日) 20:02:45.50ID:01f7hQnX0
クサチューのオンパレード
2019/12/15(日) 20:13:29.55ID:gCPcwtH+0
>>871
TRUE は自分で定義しないといけない分、面倒くさいですから
for(;;) { } ならそれも必要ないのでお得ですよ
2019/12/15(日) 20:14:24.62ID:01f7hQnX0
ここC++スレだよな? (極度の脱力)
2019/12/15(日) 20:15:33.29ID:nhcuVJi80
キチガイの隔離スレですよ
2019/12/15(日) 20:33:32.81ID:5sPbacoo0
C++スレであることを忘れてた
while (true)
while (1)
for (;;)
do while (1)
do while (true)

forが一番文字数が少ないけど...
while (1) を一番良く見る
2019/12/15(日) 20:38:53.09ID:TpJAGc8G0
>>870
既に816に書いたし、元のstackoverflowとの例とも同じだが、再記すると、

do {
bool flag = ...
} while (flag);

要するに while () までスコープを拡大しろ、というだけ。
これ自体もfor文とは整合性が取れている。敢えてスコープを [ ] で示すと、

[ for (int i=0; i<num; i++) { ... } ]
[ do { ... } while ( ... ) ]
[ while ((String^ line = sr->Readline())!=nullptr) { ... } ]

要するに全部外側まで含めろ、でしかない。
これは既に記したC++リファレンスでも言ってるだろ。
> 見方を変えるとfor文で可能な初期化が、なぜかif文やswitch文ではできない、文法に一貫性がない問題と見ることもできる。
> https://cpprefjp.github.io/lang/cpp17/selection_statements_with_initializer.html
ならdo-whileとwhileでもやらせろ、というだけの話。

ただしこれに関しては合意する必要がないので、ここまででいい。
俺はこれが最善だと思うし、君は816が最善だと思っているだけ。
提案するならどうぞ。俺は君の案が最善だとは思わないから協力はしない。
ただ、仕様委員会が君の提案を最善だと思うのなら、通るだろうし、その可能性もあると思う。
どちらがいいかなんて俺と君で詰める必要はないし、その意味もない。
(というのを868で言ったつもり)
2019/12/15(日) 20:40:25.63ID:5sPbacoo0
>>868
過去のコードが動かなくなるのはダメだ
って言ってるのに
2019/12/15(日) 20:55:41.23ID:5sPbacoo0
while (★::flag)

互換性を保つならこんなんだろうげど
★にたいする適切な物が思い浮かばない
予約語を増やすか演算子を増やすかくらい
直近の変数がデフォにならないのも違和感

そもそもループ変数のスコープ問題が解決しない
2019/12/15(日) 21:28:20.75ID:fGq+HT2S0
>>878
やっぱり>>833で指摘されていることが理解できてない。

> do {
> bool flag = ...
> } while (flag);

今でも合法なコードの意味が変わってしまうからダメなんだよ。
forの拡張や>>812とはそこが違う。
2019/12/15(日) 21:40:37.26ID:DlSa33cZ0
なるほど
上にスコープが伸びるのと
下にスコープが伸びるのでは違うのか
2019/12/15(日) 21:41:43.67ID:jn3jmPlRa
>>871
意味的には1で充分でしょ
trueはいいけど、TRUEはありえない
2019/12/15(日) 21:47:17.39ID:5sPbacoo0
意味的に1で良いなんて言い出したら
わざわざC言語で普通TRUE, FALSEを定義する意味もなくなってしまう

>>871はCスレと勘違いして書いたので
C++であれば当然true
2019/12/15(日) 22:44:12.91ID:jn3jmPlRa
>>884
stdbool使ったらtrueでしょ?
TRUEなんてどっから出てきたんだ?
C99以降なら1で充分なんだよ
2019/12/15(日) 23:01:28.34ID:TpJAGc8G0
>>882
結果的にはそうだが、
× 伸びる
○ 追加される
だ。まあ、俺も間違っていたが。C++リファレンスにもモロに書いてあるが、
#define if {if
#define switch {switch
に近い。(後ろ側!という突っ込みは無しで)

>>878を訂正すると、同様にスコープを [ ] で書くとして、
[ for ( .,.. ) [ { } ]] // (または [ for ( ... ) { } ] とも解釈出来る)
[ if ( ... ) [ { } ]]
[ switch ( ... ) [ { } ]]
になってる。だから同様に while 文は
[ while ( ... ) [ { } ]]
とするのは全く問題ないし、時間の問題だろう。
ただし do-whileは
[ do [ { } ] while ( ... ) ]
ではまるで意味がないので、これはどうしようもない。
for文のスコープについては上記の通り2通りの解釈方法があり、
おそらくCの連中は体感的に後者だと思うのだが、
C++で前者だということにして if と swtch を揃えた、というところか。
なら、技術的に何ら問題ない while もほぼ間違いなく揃えられるだろう。

よって、結果的に前か後ろか、という問題だが、まあ、そういうことだ。

>>880
switchに対して同様にスコープを『追加』するのは全く問題ない。
君がswitchについて誤解しているのは、俺と同様、スコープが『拡大』されると勘違いしているからだ。
上記とC++リファレンスを再度読むべし。
2019/12/15(日) 23:19:30.37ID:5sPbacoo0
>>885
文法的には1でも100でも良い
意味的にはtrue
2019/12/15(日) 23:23:25.43ID:TpJAGc8G0
>>881
>>864
> それ以前にC++は駄目な仕様は互換性が無くなっても改善して行ってる。

なお864内の
> >>833については広義に捕らえればifやswitchでも発生することだし
この部分は間違いだ。ifやswitchは互換性の問題が発生しない。
同様に、whileに対してスコープを追加しても問題は発生しない。(886で述べたとおり)

そして再度言わないと分からないようだから言うが、
俺は「使えない仕様は互換性が無くても改善しろ」という意見だ。
だからそもそも糞コードが動かなくなることは問題にしてない。
833のコードは外側の a を普通に内側から変更する手段がない。
よって必ず無限ループでしかなく、最初から

int a = 0;
while (1) {
if ( ... ) break;
}

だ。余程おかしな事をしない限り、833のコードなんて存在しない。
それ以前にdo-whileなんてほぼ死滅状態だし。
そしてここに問題が発生する可能性のある場合、コンパイラが警告を出すことは容易だ。
2019/12/15(日) 23:26:49.02ID:5sPbacoo0
>>886
スコープが拡大とか縮小とか一貫性とか意味付けとかの問題じゃなくて

【過去のコードが動かなくなるのはダメだ】
2019/12/15(日) 23:35:22.96ID:TpJAGc8G0
>>889
ならwhileについて問題ないのは理解したか?

互換性を重視するか、最高の仕様を目指すかは、合意を取るべき案件ではない。
それは既に言ったが、意味がないからだ。
2019/12/15(日) 23:36:26.80ID:nhcuVJi80
必ずしも
> 【過去のコードが動かなくなるのはダメだ】
ってこともないけどな
C++17でもC++20でも非推奨機能削除してるし
auto_ptrを使ったC++03基準のコードはもはやコンパイルできない
2019/12/15(日) 23:48:32.16ID:5sPbacoo0
ライブラリ仕様じゃなくて純粋な言語仕様
コンパイルエラーが出ない
(当然今のコンパイラでは警告も出ない)
C言語にも影響する

これだけダメな理由が揃ってる

過去にこんな変更あったか?
2019/12/15(日) 23:51:49.90ID:5sPbacoo0
代替手段がもいくらでもある、ほとんど使われない改善に対して
そんな冒険をする必要はない
2019/12/15(日) 23:57:57.03ID:YusZiZGS0
>>833のコード自体は外側のaがvolatileとかでもない限りあまり意味はないが
while (++a < c);とかいくらでも意味のあるコードにできるんだけどね

それに>>833は無限ループではなくて一度もループしないなんだが
2019/12/15(日) 23:58:04.15ID:5sPbacoo0
>>890
ループ変数のスコープ問題が解決しないからダメ
2019/12/16(月) 00:06:29.13ID:wPQGlTEXa
>>887
100なんて値は無い
_Boolにキャストすれば1になる
2019/12/16(月) 00:08:00.93ID:xr9KOlE00
文法的には
while (100)
でも良いって言ってるの
2019/12/16(月) 00:11:08.90ID:xr9KOlE00
文脈読まずに反射で書いただけかよ
2019/12/16(月) 00:23:53.19ID:i+s7iGW+0
>>895
whileで駄目なコード書いてみ?
2019/12/16(月) 00:28:09.44ID:0zaeABy30
(早くこの隔離スレを終わらせたくなってわざとやってる気がしてきた)
2019/12/16(月) 00:56:47.70ID:i+s7iGW+0
>>895
すまん、重要なところを間違えていた。
ただまあ、通じているとは思うが。

> switchに対して (>>886)
> 君がswitchについて
どちらも while が正しい。だから 890 や 899 の発言になる。
一応訂正しておく。
2019/12/16(月) 03:48:32.59ID:Awem8+qZ0
>>898,900
こいつはMIPS君とか呼ばれてるらしいんだが、間違い指摘されたりするとファビョって暴れ出すんだよ
思い込みが激しいから、それが原因でしょっちゅう間違いをやらかすんだけど、
やたらとプライドだけは高いから引っ込みがつかなくなって連投しだすんだな
この前も、アセンブラ初心者スレで「キャリーフラグがアウトオブオーダー実行を妨げる」とか言って大恥かいたはずなんだけどね
アウトオブオーダーを正しく理解してたらそんなことは言い出さない(cmovで簡単に回避できるので)

平日の昼間でも連投してるから、おそらく頭がカチカチで5chしか居場所のない爺だと思う
相手しても疲れるだけだよ
2019/12/16(月) 08:16:52.87ID:xr9KOlE00
>>899
>>812
2019/12/16(月) 08:21:18.41ID:xr9KOlE00
>>902
キャリー君おはよう
2019/12/16(月) 08:32:06.41ID:xr9KOlE00
キャリーフラグが大好きキャリー君
知識不足でまともな会話が出来ないキャリー君
いつも長文で御苦労様
2019/12/16(月) 09:17:08.40ID:i+s7iGW+0
>>903
それは do-while と俺は言っている。
とりあえず俺の記載ミスも仕様に関する誤解も酷かったので、一端話を整理する。(もう一度書き直す)

スコープは [ ] で書くとして、if や switch のようにスコープを『追加』されている場合、以下となる。(878と同じ)
[ for ( .,.. ) [ { } ]] // (または [ for ( ... ) { } ] とも解釈出来る)
[ if ( ... ) [ { } ]]
[ switch ( ... ) [ { } ]]
よって while 文は
[ while ( ... ) [ { } ]]
と解釈を変更することにより、互換性の問題なしで for/if/swtch と揃える事は可能。
俺の予想ではこれは時間の問題で仕様に入る。

do-whileは
[ do [ { } ] while ( ... ) ]
としても意味がないので、
[ do { } while ( ... ) ]
とするしかないが、これだと互換性の問題を回避出来ない。

ここまではいいか?

お前は議論慣れが全然足りない。
whileとdo-whileで全然違うこの状況で、do-whileを略してwhileと言ってはいけない。
つまり>>880がよくない。これでは話が混乱する。
ただ、混乱しても収拾すればいいだけだ。まずはここまでの認識を確認する。
2019/12/16(月) 09:18:17.98ID:i+s7iGW+0
そして何度も言っているが、
その先の、「互換性がないがどうするか?」という点についてはここで、または俺と君とで詰める意味がない。
>>812については既に>>868で言ったが、その仕様では見やすくないので俺なら使わない。
だから仕様として入れる意味も、改訂する意味もない、というのが俺の意見だ。ただしそれだと
[ do ( ... ) [ { } ] while ( ... ) ]
形式に出来、互換性の問題なく、for/if/switch/whileと揃えられる。
だから提案すれば通る可能性はある。


事の発端は808、「do-while が使えなかったのはスコープの仕様が『間違っていた』からではないか?」という俺の見解だが、
今現在のところ、
if と switch について間違っていたと言うのは厳しいが、修正されている。
while については直前にループ変数を定義するだけの使い方も本当によくあるので、
この仕様は明確に間違っていたと言える。
そして for/if/swtch と揃えることに障害がないのでじきに修正されるはず。
問題は do-while で、812みたいな糞ならイラネ、なら解決策がない。
2019/12/16(月) 19:17:21.57ID:xr9KOlE00
じゃあ演算子の優先順位もおかしいから
今から変えようか
2019/12/16(月) 21:08:24.55ID:79yFDnLG0
1. 今の仕様は間違っているから修正されなければならない
2. 間違いを正しく修正するうえでは互換性が失われるのも仕方がない

テロリストや狂信者の思考やね。
2019/12/16(月) 21:17:34.10ID:kmOA257c0
char* ptr = "string";
これを正したのはテロリストや狂信者か
2019/12/16(月) 21:18:58.12ID:kmOA257c0
getsの廃止も1.と2.の原理に主義を置いた決断だね
2019/12/16(月) 21:30:00.29ID:kmOA257c0
俺は本来あんなクズの肩なんざ持ちかねえが
おかしいことはおかしいと言わねば気が済まん
頼むから奴よかマシな言い訳してくれ
2019/12/16(月) 21:33:45.50ID:xr9KOlE00
演算子の優先順位もおかしいから
今から変えよう
2019/12/16(月) 22:12:40.02ID:lHOInDb/0
do-whileはもう廃止でいいじゃん

それより統一loop構文考えようぜ
loopで気持ち悪いのは、loopの脱出条件が複数ある場合
for、whileもループを回す条件を書くじゃん
でもloop中に条件によってbreakする場合って当然ループを脱出する条件を書くじゃん
この論理が裏返ってるところでよく間違えるし、
文法的に異質なのもわかりにくい
誰かナイスなアイデア考えてくれ
2019/12/16(月) 22:15:02.26ID:xr9KOlE00
for-while
2019/12/16(月) 22:15:13.36ID:7RbBMAS80
言語を考えるスレじゃねーだろここ
2019/12/16(月) 22:20:45.27ID:lHOInDb/0
ここでみんなで考えて江添に標準化させよう
2019/12/16(月) 23:35:21.75ID:i+s7iGW+0
>>912
死ねよクズゆとり

>>859で言ったこと守れよゴミ
さっさと出ていけ
2019/12/16(月) 23:42:01.75ID:i+s7iGW+0
何度も繰り返した展開だが話を整理すると、
>>912みたいなクズゆとりが結局自由に振る舞える状況では、どうにもならない。
だから俺は912みたいなクズゆとりを排除出来る場所を作ろうとしている。

文句言うだけ言って居座り、それを悪びれもしない。
ゆとりの問題は、これをクズだと認識出来ないことだ。
2019/12/17(火) 05:10:23.79ID:m/3ORcYe0
>>910-911
「型が違います」「関数が存在しません」と
コンパイラやリンカがエラーにしてくれる変更は
まだタチがいいんだよね。

困るのは黙って挙動が変わるような変更。
もっとも、いまはビルドツールもリッチになってて
「新旧の規格で動作が違うよ、大丈夫?」みたいな
親切な警告を出してくれるだろうけど。
2019/12/17(火) 06:50:41.01ID:YMIUnRyvM
コンパイラオプションで互換モード付ければいいだけ
そもそも>>833のコードがどれだけあるのかと
2019/12/17(火) 07:50:24.25ID:szajkj1a0
>>905
おいおい、突然どうしたw
2人にアンカー張ってるんだから、あんたのことを指してたつもりじゃなかったんだが
それに「いつも」って何だ?
もしかして、「5chしか居場所のない爺」に反応して墓穴でも掘ったのかw
2019/12/17(火) 10:04:58.28ID:vM5Ctsvv0
>>922
ゆとり死ね

お前もっさっさと出て行けよ
お前の書き込みなんて何ら有効な物がないだろ
お前は邪魔しかしてない
お前らゆとりはそれを平気でやるところがクズなんだよ
そしてそれを自覚出来てないから嫌われる

結果的にゆとり自身がゆとりの安住の地を壊してる
だからゆとりはゆとりコミュニティを持てずに(ゆとりからすると)老害コミュニティに混ざろうとするが、
それもこっちにとっては大迷惑なんだが

老害だと思うなら来るな
来るならおまえらゆとりよりお前らが馬鹿にしている老害の方がましだと認めていることになるのを認識しろ
そしてもうちょっとましに振る舞え

といっても、既に言ったが、きちんと使えている奴と全く駄目な奴に分化しつつある
勿論ゆとり内にもきちんと使えている奴もいる
そして俺はそれを差別せず、きっちり「ネットの使い方が分かってない馬鹿」だけを排除出来る場所を作る
ここで言うと、まず>>912(=859)と>>922、この2人をBAN出来ればずいぶんましになると思う
(俺だったらそれでまず様子見、駄目なら3人目>>914(=837)をBANしていく)

まあこういう事も何度も言ったことだが

もし俺の構想に賛同するなら、
誰がコミュニティを壊しているのか、誰をBANすればそれを修正出来るのかを、いちいち考えておいて欲しい
日本人にはその経験が無く、これを適切に出来る奴が少ない
間違ったBANを発行すれば、コミュニティは酷く崩壊する
例えばここだと>>811(ワッチョイ 7773=一番沢山書いている奴)をBANしてはいけない
彼はウザがられるかもしれないが、彼をBANするようでは自由な議論は出来ないから、存在価値が無くなり、みんな出ていくことになる
(なお俺は811をウザイだなんて思ってはいない、むしろ元気があってよろしい)
2019/12/17(火) 18:09:37.99ID:6xxsd82OM
void君もあと80レスの命か。さよならvoid君
2019/12/19(木) 18:44:19.79ID:RK05kZ1/0
威張れるところがここしかない惨めなオナニー小僧
実社会ではゴミにすらカウントされていないくせに
2019/12/30(月) 16:20:58.30ID:9i/1tGuTM
最近はCMAKE_CXX_FLAGSやadd_compile_optionsを使うな、target_compile_optionsを使えとか言われてるけどさ、
数10のターゲットにちまちま-Wallつけるとかめんどいんだけど
2019/12/30(月) 16:26:42.95ID:0guh/JiB0
数十のターゲットをサポートする心意気はすごいね
当然CI使ってると思うけど全部テスト可能?
2020/01/01(水) 01:22:36.45ID:m6ZauGzvM
>>927
引き継いだプロジェクトがくそみたいなmakefileを使っていたからCMakeで書き直した
当然テストされてない(testというディレクトリはあるが保守していないので動く保証がないと言われた)
2020/04/28(火) 19:31:45.40ID:AaGQGXoS0
libgccの大きさじゃなくてunwind用のハンドラコードの増加じゃないの?
レス数が900を超えています。1000を超えると表示できなくなるよ。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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