[過去ログ] 【初心者歓迎】C/C++室 Ver.106【環境依存OK】 (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
693: 2021/04/28(水)15:30 ID:WdoV9Bq9(2/2) AAS
走査線と描画が重なったらチラツキが激しくなるから下から描いていくんだよ
694
(2): 2021/06/14(月)15:32 ID:TE2ntQhj(1) AAS
for(int a=0; ...; ...){...} とかはループ内だけのスコープで int a が使えるのに

int a;
while(a){...}
とか
int a;
do{...}while(a);
とかは
while(int a=...){...} ←これだけはOK?
とか
do{...}while(int a=...);
省3
695: 2021/06/14(月)15:40 ID:peg/OyGg(1) AAS
do{...}while(int a=...);  宣言より前に変数を使用する
do{int a; ...}while(a);  スコープの外に変数を持ち出す
696
(1): はちみつ餃子 ◆8X2XSCHEME 2021/06/14(月)17:56 ID:fvxG9/iR(1) AAS
>>694
C/C++ の理屈では波括弧の部分は繰り返しの構文 (do や while) の一部ではない。
たとえば while の文法は
while ( expression ) statement
というように定義されていて、 statement ってのは要するに文をひとつ書けるってことね。
で、 statement として複文 (波括弧によって複数の文をひとつにまとめたブロック) もありうるってことになってる。
そんでもってブロックの先頭で宣言された変数のスコープに関するルールはブロックのほうに書かれていて、
繰り返しの構文のときだけ特別扱いということは出来んのだわ。

> while(int a=...){...} ←これだけはOK?

これは C++ では良いけど C では駄目
697: 2021/06/14(月)18:58 ID:HtMoZ8Hn(1) AAS
小さいスコープの中だけで使う自動変数だってんで
特に if や for 等なく いきなりカラス括弧開いて変数宣言することがままある
698: 2021/06/14(月)21:48 ID:OzvaLd6A(1) AAS
C++ってOSレイヤで差異が有るファイルシステムの事を考慮せずにプログラムを書ける済む仕組みって組み込まれてるの?
699: 2021/06/14(月)21:53 ID:VOy4fGQR(1) AAS
標準ライブラリに含まれるファイルシステムライブラリでできる範囲の操作なら差異は出にくいと思うけど
700
(1): 2021/06/14(月)22:00 ID:eQ9/Z+Eb(1) AAS
>>694,696
C++でもwhileの判定式中の宣言は毎回新しくなるんで、使いみち思いつかん。
while(int i=10) { i--; } は、無限ループになる。

できるとしたら、処理が終わったらすぐに始末したいobjに対して、
{ myclass obj(); while(obj) { obj.some_op(); } }
(obj は operator bool() とか実装してる前提)
が、
while(auto obj = myclass()) { obj.some_op(); }
こんな風にかけてちょっと{}がスッキリするくらい?(実際はobjが毎度構築される)
701: 2021/06/14(月)23:04 ID:wv1U8ajF(1) AAS
カラス括弧!
初めて見た!
702: 2021/06/15(火)08:13 ID:4rRZmg7L(1) AAS
>>700
まあ while(...){} は for(; ...;){} で書けるしメリットないかな
ただ
do{ int a = …; }while(a); の方は書けたら嬉しいな
使用頻度は低いけど
703: 2021/06/15(火)10:57 ID:5dh+WKsO(1) AAS
do は do .. while(0) のパターンしか使わないな。
704: 2021/06/17(木)23:23 ID:Gx3mnqFH(1) AAS
break用なら switch(0)default:{...} っしょ?
705: 2021/06/18(金)08:43 ID:R4m5mk7U(1/2) AAS
それdoよりどういうメリットある?
わざわざdefault:書かないとならないしインデント深くなりそうだし。
706
(1): 2021/06/18(金)11:21 ID:FZUuAAIq(1) AAS
マクロで展開するならインデントは無視できる
707: 2021/06/18(金)11:50 ID:7Huy+AZL(1/2) AAS
do{}while(0) は最後に ; 書く前提だし矛盾ないけど
switch(0)default:{...} は ; の扱いの困らない?
708: 2021/06/18(金)11:55 ID:AVf6Ht59(1) AAS
for (int i = 0; i < 1; i++)
709: 2021/06/18(金)12:32 ID:6AzE04jr(1) AAS
{ } 内スコープからの脱出で break; 使いたいってのと
マクロで見た目関数向けな #define foo(arg) do { なんちゃらかんちゃら } while(0)

do { } while(0) は両立できるけど switch(0)default:{} で後者は怪しげ

if (<condition>) foo(arg); else <elsecase>; とかが
710
(1): 2021/06/18(金)13:25 ID:7Huy+AZL(2/2) AAS
while(1){
...
break; // } の直前
}
で良いと思う
711: 2021/06/18(金)14:27 ID:tn5JYHw4(1) AAS
それどういう意図があんの?
処理は結局1回
スコープだけじゃダメなん?
712: 2021/06/18(金)14:44 ID:tzOvIsZE(1) AAS
>>710
お前が良いと思うなら使えばいいと思うが俺には無駄なbreakが必要なのはダサいと思うから do { ... } while(0); にするわ
1-
あと 290 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.202s*