[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 02/12 01:51 / Filesize : 317 KB / Number-of Response : 1019
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C言語なら俺に聞け 147



1 名前:デフォルトの名無しさん [2018/08/16(木) 23:36:02.22 ID:fOCSKLtw.net]
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
codepad.org/

C11
www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf

C99
www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
kikakurui.com/x3/X3010-2003-01.html

C FAQ 日本語訳
www.kouno.jp/home/c_faq/

JPCERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/


C言語なら俺に聞け 146
https://mevius.5ch.net/test/read.cgi/tech/1525031257/

75 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 12:29:15.96 ID:GIXT+l9b.net]
>>71
どうした?
コードレビューで上司にボコボコにされた腹いせか?
こんなとこでイキっても虚しいだけやで。

76 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 12:47:09.71 ID:EQ4qcC3V.net]
>>72
なぜ?

77 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 12:53:55.98 ID:gERn4ySS.net]
>>73
ここがム板ってことを忘れたか?
技術的な話で来い

78 名前:デフォルトの名無しさん [2018/08/21(火) 12:54:14.69 ID:m1oFA/yA.net]
多次元配列の型は typedef で型名作っておけば楽なのでは?

79 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 12:56:41.15 ID:Fhw28p93.net]
>>68
>>76
この書き込みのどこが技術的な話なんだw
単にイキってるだけじゃん。

80 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 13:04:39.72 ID:gERn4ySS.net]
>>78
構文糖衣の話をしたんだが
構文糖衣と書いてないと読めないオツムなのか?
アホw バカwww

81 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 13:05:57.10 ID:gERn4ySS.net]
さて、買い物に行くぜ
妻子の夕飯を作らにゃならん

82 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 13:09:48.25 ID:O6Fgkzwj.net]
>>75
そりゃわかりにくいからだよ。
引数にするとCの多次元配列の嘘くささがよく表れるわ。
せめて構造体で包むとかして名前を付けた方がいいね。

83 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 13:09:58.77 ID:EQ4qcC3V.net]
>>71
無駄なコスト



84 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 13:10:23.54 ID:RiLuNws8.net]
>>70
それを糖衣構文というかどうかどうでもいいけど
だれも機械の解釈の違いには言及してない定期

>>50>>52
明示とは機械に対してではなく人間に対してのことを言ってるからこの返信は意味がずれてる

85 名前:デフォルトの名無しさん [2018/08/21(火) 14:09:26.92 ID:Xve8S0h8.net]
超初心者です。
シミュレーターで動かしながら独学で学んでいるのですが、
scanfが動かない(スルーされる)ので困っています。scanfが動くシミュレーターってあります?

86 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 14:13:40.03 ID:Xve8S0h8.net]
今はpaiza.ioを使っています

87 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 14:16:15.27 ID:Hz7fBosn.net]
下の入力欄が空白じゃないの?

88 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 14:27:50.04 ID:Xve8S0h8.net]
解決しました。ありがとうございました。

89 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 20:15:22.43 ID:FwleoeVd.net]
for文でこんなのを発見したのです。
for(;;)
ご覧のとおりセミコロンがカッコ内に2つあるだけ。
これはどういうfor文でしょうか。
ググり方も分からないです。

90 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 20:17:35.28 ID:bAEvazF4.net]
無限ループ

91 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 20:22:25.64 ID:i/CPlprw.net]
昔からその書き方の無限ループを好む人は多い
俺が知ってる範囲だとカーニハンもその書き方を好んでいた

92 名前:88 mailto:sage [2018/08/21(火) 20:22:27.49 ID:FwleoeVd.net]
>>89
(*´Д`)ありがとうございました。

93 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 20:27:12.52 ID:mIqstMqN.net]
無限ループって言っても
大概は何かの条件で脱出するわけだから
while (条件) が一番わかりやすいと思う
あ、好みだろうから、反論は不要です



94 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 20:34:59.42 ID:8p839GFL.net]
>>92
俺も無限ループはwhile(TRUE)派だな。
静的解析で怒られるから使うなって人もいるけど。
これも個人の好みなので反論不要です。

95 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 20:45:15.49 ID:FwleoeVd.net]
無限ループには
for(;;)
while(1)
while(true)
などがあるようですが、驚いたことにfor(;;)がC言語の伝統的スタイルなんだそうで。

96 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 20:50:55.87 ID:mIqstMqN.net]
goto 笑

97 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 21:07:06.74 ID:FuTngql1.net]
do {
} while (true);

だな

98 名前:デフォルトの名無しさん [2018/08/21(火) 21:12:46.13 ID:xHZnBR+z.net]
true って新しいCだと使えるの?

99 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 21:15:49.80 ID:Bspmt0aQ.net]
_Bool

100 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 21:18:05.52 ID:mIqstMqN.net]
while (1==1)
なんて

101 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 21:21:39.51 ID:WLqP+HZB.net]
for(;;)は無条件であることを的確に表現してる
条件が書いてないのはこれだけ

102 名前:デフォルトの名無しさん [2018/08/21(火) 21:30:40.05 ID:xHZnBR+z.net]
そういややったことないけど while () はできないのかな?
できたらできたでなんか怖いがw

103 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 21:35:16.36 ID:8p839GFL.net]
>>100
冷静に考えると、何でfor(;;)の真ん中の条件式のとこ空欄でも正しい構文になるんだろうね。
for以外に条件式省略できる構文ってないよね?



104 名前:デフォルトの名無しさん [2018/08/21(火) 21:39:06.78 ID:xHZnBR+z.net]
if () ができたらなんか嫌だな

105 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 22:56:19.30 ID:7hn0MDmO.net]
>>102
確かに…

106 名前:さまよえる蟻人間 mailto:sage [2018/08/21(火) 23:14:00.83 ID:H0lJZ+G5.net]
左右の式が省略できるから、ついでに真ん中の式も省略可能にしたんだろう。

107 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 23:18:17.02 ID:mIqstMqN.net]
二つのセミコロンも省略して良いことにしようw

108 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 01:03:40.03 ID:Vm7yolE7.net]
ループの話でふと思い出したんだけど、この書き方キモいと思う?

LOCK();
while (条件) {
  UNLOCK();
  LOCK();
}
UNLOCK();

109 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 01:07:46.55 ID:srSdeWyK.net]
きもいけどきもいだけだから必要ならそうする
Cだしね

110 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 01:11:58.05 ID:+gfjb8L8.net]
condwaitみたいなの、たまに書くと混乱するわ

111 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 01:18:33.81 ID:J6lVaoNe.net]
LOCKして、何かして、UNLOCKして解放する
わけではないんだ?

112 名前:デフォルトの名無しさん [2018/08/22(水) 02:53:55.25 ID:wb9Zg9xS.net]
for (\(^o^)/)

113 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 06:53:07.59 ID:Vm7yolE7.net]
>>108
while (条件) で統一したいと思いつつ、この手の場合LOCK, UNLOCKのインデントがズレててキモいなといつも気になってしまう
まあどーでも良すぎていつも放置するが

>>110
アトミックな条件チェックの話



114 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 07:33:35.95 ID:RPMrdt6N.net]
>>112
手動でインライン展開する必要がなければ、普通は、

while (check_func()) {
}

bool check_func(){
LOCK();
bool retval = XXX; // check something here
UNLOCK();
return retval;
}

とする。
C++なら inline を付ければインライン展開時(元のコード)と似たようなオブジェクトコードが出ることになっている。

115 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 09:35:21.99 ID:ULC6Ul0L.net]
>>107
do {
LOCK();
UNLOCK();
} while (条件);

116 名前:114 mailto:sage [2018/08/22(水) 09:36:42.99 ID:ULC6Ul0L.net]
ごめん、ちがた

117 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 09:52:30.97 ID:2YTphjWh.net]
>>107
条件を判断するためだけにLOCK/UNLOCKを行うコードだとしたら最悪のコードだ

do {
LOCK
判断
UNLOCK
if (!判断結果)break;
} while (1);

素直にこうしなさい

118 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 11:11:08.70 ID:yAP1ongv.net]
条件判断が目的じゃないと思うぞ

119 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 11:35:04.81 ID:yJL450CM.net]
どこが素直なんだ
締め切りが迫ってバグが取れず
なりふり構ってらんなくなったやつが書く
イカレたコードでしかない

120 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 11:58:31.90 ID:DbwOmzYq.net]
>>116
これは酷いw

121 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 12:04:07.83 ID:MGgq/0yt.net]
イカれたコードを紹介するぜ

122 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 12:27:28.23 ID:2YTphjWh.net]
ん?
一番素直だろうが
条件判断の為だけにLOCKしてるという前提で

判断を関数に分ける?
分けるかどうかはこんなちっぽけな理由で判断するべきじゃないよ
判断の度に関数にしてたら意味不明な関数で溢れるぞ

もちろん意味が明瞭で他にも同じ判断を使う可能性があるのであれば
関数やマクロでパッキングすべきだが

123 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 12:36:44.83 ID:yJL450CM.net]
LOCK
判断
UNLOCK
というアトミックなシーケンスを関数にする理由はちっぽけじゃない
LOCK/UNLOCKが必要な具体的な場面を想定しての発言には見えない



124 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 12:50:05.96 ID:2YTphjWh.net]
どういう場面かなんて>>107では判断不能だし
分けるべきか分けないべきかも>>107では判断不能

判断出来ないのに
「わざわざ関数構成を変えるべき」
なんて主張をすべきじゃない

125 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 13:02:48.20 ID:Xk7aTjF/.net]
>>123
いやー、わからんのはあなたに実務もしくは勉強の経験がないからよ

126 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 13:14:18.16 ID:yJL450CM.net]
昨日のvoid func(int ary[100]);にしても
ary[1000]を警告する処理系の具体的な例が挙がってないしな

127 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 13:39:37.67 ID:2YTphjWh.net]
>>124
わからんねえ
エスパーじゃないんだから

経験が少なくて
分けないべき場面が思い浮かばないんだろうねえ

128 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 14:01:43.77 ID:yJL450CM.net]
間違いない、昨日のバカだ
NGIDっと

129 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 14:12:07.92 ID:JOaq3c53.net]
>>127
そういうあなたは昨日のイキってた方の人?

130 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 14:15:28.00 ID:J6lVaoNe.net]
パッと見て何をしているか分からないソースって
後の人が取っても苦労するし、気の毒

131 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 14:19:13.21 ID:J6lVaoNe.net]
多分書いた人の意図は 
while文内の判定時に
LOCKしたいのかとは思うが

132 名前:デフォルトの名無しさん [2018/08/22(水) 14:26:31.81 ID:TfhbroeT.net]
while ( ^∀^)

133 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 15:10:17.96 ID:44OVOulF.net]
check_func()というアドホックっぽい関数名が誤解のもとかな
get条件atomically()にすれば意図が明白



134 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 15:19:38.80 ID:yJL450CM.net]
atomicallyって文言いるかねえ
いちいち全部につけて回るより
LOCK/UNLOCKしてることは
忘れたフリができるほうがいいと思うが

135 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 16:17:52.89 ID:BT6ndhEb.net]
英語圏の人には for (;;) をまとめて熟語的に "forever" と読めて
座りがいいのかも知れん。
カーニハンとパイクの『プログラミング作法』に
それに近いようなことが書いてあった。

136 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 16:25:37.12 ID:6OOlmfSC.net]
>>133
条件取得の関数がすでにあってそれがアトミックでないケースも想定

137 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 16:31:28.34 ID:UfcjGeQr.net]
>>134
なるほどforeverか
そういう風にも読めるな

138 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 16:44:34.35 ID:AU3mefLA.net]
>>134
そう言われると確かに座りが良いかもしれんが、(;;)をeverと読むのか。。。
今の時代では顔文字の失敗作にしか見えんなw

139 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 16:54:07.40 ID:yJL450CM.net]
>>134
#define ever (;;)
とかやんの?

だったら
#define forever for (;;)
のほうがマシだと思う

>>135
空想論なら付き合ってらんねえぜ

140 名前:134 mailto:sage [2018/08/22(水) 17:01:35.42 ID:BT6ndhEb.net]
「その部分のループ、終了条件が色々なんでとりあえず for (;;) で回して」
みたいな口答でのやりとりで for (;;) を forever と読めば手っ取り早いでしょ。
while (1) で…よりも言いやすいんじゃないかと。

これは空想論だけどね。

141 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 17:28:26.65 ID:yJL450CM.net]
無限ループで済むことを
forの第2式を空欄で
なんて回りくどい言い方しねえよ

142 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 17:52:35.43 ID:l5cdWJfA.net]
>>140
別に回りくどくないし
良く見るコードだよ

いろんな人のコードを見たりしないの?
みんないろんなポリシーでいろんなコードを書くから

いろんな書き方を知っていた方が良いよ

143 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 17:59:10.07 ID:l5cdWJfA.net]
while (条件)
でしかループが組めないのはちょっとさみしい

無理やりこの形にするために
>>107みたいな意味不明なコードになる



144 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 18:07:38.93 ID:yJL450CM.net]
>>141
口頭でのやり取りつってんだろ
流れを読めよ

145 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 18:22:36.66 ID:PnEe4J3b.net]
マウント取りたくて必死なアスペだから仕方ない

146 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 18:30:03.99 ID:l5cdWJfA.net]
口頭で
forの第2式を空欄で
なんて発想は出て来なかった

147 名前:デフォルトの名無しさん [2018/08/22(水) 20:52:31.01 ID:ROURn6Ut.net]
for ( ;∀;)

148 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 21:21:35.96 ID:yJL450CM.net]
> while (条件)でしかループが組めないのはちょっとさみしい

ここは同意
while(1) であろうが for(;;) であろうが同じこと
どっちかが好みで他方で書かれたからって可読性が落ちたとか騒ぐ
救いようのないドアホには付き合ってらんね
それだけだ

149 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 21:23:43.06 ID:82KbBjx+.net]
>>116を認めないお前も同じようなものかと

150 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 21:26:52.07 ID:MwkxeX8r.net]
whileで無限ループする場合、0じゃなければ1以外を
使ってもいいわけだがどうする?
電話番号とか使えばオシャレかもしれないよ

151 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 21:27:18.15 ID:JglTnHlJ.net]
とりあえず、おかしなのに絡まれた >>134 に同情を禁じ得ない。

152 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 21:28:19.40 ID:yJL450CM.net]
別にiocccのコードが読めろとか言ってない
int *aryがint ary[100]じゃなきゃ読めないとかぬかしたり
while(1)がfor(;;)じゃなきゃ読めないとかぬかす
想像を絶するアホには付き合ってらんねつってるだけ
lock/doit/unlockを関数化する必要性がわからないアホも含まれる

153 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 21:33:30.14 ID:Jjipv9/i.net]
>>151
「じゃなきゃ読めない」ってどこかに書いてたっけ?
そんな気はしてたが、やっぱり日本語不自由な人だったらしい。



154 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 21:42:00.39 ID:yJL450CM.net]
じゃあ喚くのやめろ
うるせえんだよ

155 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 21:43:08.30 ID:Jjipv9/i.net]
>>153
やっぱり日本語不自由な人なんだw

156 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 21:51:19.93 ID:Vzjpb7lE.net]
何がじゃあなのかわからない
思考がbool値しかないのか

157 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 21:51:23.19 ID:wgajpaTM.net]
アトミックな操作の意味がわかってたらああはならんのですよ

158 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 21:52:48.42 ID:Vzjpb7lE.net]
世の糞コードのほとんどはコミュニケーションの失敗により発生する

159 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 21:54:35.09 ID:Jjipv9/i.net]
C言語以前に日本語もちゃんと理解できない人と議論が噛み合うわけない。
相手しただけ損したわ、アホらしい。

160 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 22:02:56.29 ID:yJL450CM.net]
勝手に損してろ
誰にも賠償請求できない
泣き寝入りだな
アホw バカwww

161 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 22:05:01.83 ID:Jjipv9/i.net]
はいはい、ちゃんとにほんごをべんきょうしてりかいできるようになってから、かきこんでくださいね。

162 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 22:13:51.56 ID:RPMrdt6N.net]
まあ概ね ID:yJL450CM が言っていることは正しい。

>>107のコードは、かなり特殊で、普通はあり得ない。
キモイかと問われれば、キモイと答えるのが正しい。
(必要ならやればいいが)

>>116
それはdo-whileの標準的使い方とは異なるので、混乱を招く。

>>132
check_func()は、107を書き直した場所がすぐに分かる名前にしただけ。
実際、問題なく伝わってるだろ。
本番コードでこの名前はあり得ない。名前が被るから。


ただ、正直、こんなどうでもいいところで拘るのは止めた方がいい。上達しなくなる。
どれでもいいから自分が好きなのを選び、グダグダ言わずにどんどん書いた方がいい。
なお、Goにはwhileが無い。廃止されて、forだけになっている。

ちなみに、俺は
固定長ループ(単純ループ): for … for (int i=0;i<num;i++) 程度の簡単な場合は常にこれ
可変長ループ(複雑なループ): while
無限ループ: while (1)
do-while: 使わない
にしているが、正直、ここら辺は好みだし、自分がどう決めるかだけ。(上記は標準的だとも思っているが)
それよりは、自分の中で統一するほうが重要だ。
(少なくとも自分が書いたコードを読むときに混乱しなくなる)

業務なら、グダグダ言わずコーディングルールに従えばいい。
場所によってはwhileとforのどちらかが禁止とかもある。(どっちかは忘れた)
理由はバグって無限ループにしてしまったときにコード上から判定しづらいとかだったはず。

163 名前:107 mailto:sage [2018/08/22(水) 22:19:27.48 ID:Vm7yolE7.net]
非常にくだらない質問にレス付けてくれてサンクス
なんか荒れる原因つくってスマンかった

やっぱりあの書き方きめえよなあ・・・



164 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 22:57:41.03 ID:RPMrdt6N.net]
>>112
> LOCK, UNLOCKのインデントがズレててキモい
これは諦めろ。
酷い話、インデントがぴったり合ってないと駄目な奴はプログラマに向いてない。
どうやってもずれるからだ。
googleのコーディングルールにも昔は
・インデントを揃える努力は、キリがないしやるだけ無駄だから諦めろ
と書いてあったはず。(今見る限りないが)


ちなみにキモイ理由は、インデントではなくて、完全に入れ子になっていないからだ。
最近はこの「入れ子」の厳密さも増していて、XML(HTML等)では入れ子しか文法的に認めないだろ。
例えば、

<while>
</while>

ならありだが、

<lock>
<while>
</lock>
</while>

は駄目で、

<while>
<lock>
</lock>
</while>

にしなければならない。

165 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 00:15:44.74 ID:wxGNRrqx.net]
>>161
do while の標準的な使い方?
無限ループも標準的な使い方ですよ

do whileはforやwhileに比べてパフォーマンスが良いことがあるので
使える時には積極的に使う人もいます

do whileを一切使わない人もいますが

166 名前:デフォルトの名無しさん [2018/08/23(木) 00:29:51.18 ID:qYtPM3Ou.net]
>>107
対称性保たれてるし、よくあるコードだぞ。
俺はキモイと思わん。

167 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 00:38:41.07 ID:wxGNRrqx.net]
ロックしたい対象がわかりづらい
同じ用途のロック/アンロックが2箇所ずつある

168 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 00:40:13.64 ID:wxGNRrqx.net]
C++の場合だと
無駄にロック期間が長くなる可能性がある

169 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 00:53:05.68 ID:/qY100we.net]
>>167
なんで?

170 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 00:59:32.58 ID:HinwMmX/.net]
頭が良い人ならすぐに意図がくみ取れるけど
メンテする人が必ずしも頭が良いとは限らない
コメント書いてもバグではまって始めて読まれたりするからね
ワザと作られた落とし穴なんて受けとられる危険もありそう

バカでも分かるような書き方をする方が安全かなと思う

171 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 01:59:34.18 ID:y9Wx8uZn.net]
>>164
>>116のコードは、while (1) で開始しても同じだし、(=do-whileを使う意味がない)
そもそも>>113に比べてメリットもないだろ。
そこで do-while 使う奴なんて皆無だと思うぞ。

まあそれでもやりたければやればいい。
個人開発ではメチャやって、その失敗を業務に生かした方がいい。

ただ、上達したければ、ある程度普通のコーディングルールで組んだ方がいい。(世間に合わせる)
自分と相手のルールが一致してたら、相手のコードも読みやすく、
結果、同じ時間、同じ努力でも読める量に違いが出てくるから。

あと、初心者はよく
・色々文法を知ってて、様々な書き方が出来る奴が偉い
と勘違いしがちのようだが、これは明確な間違いだ。(これは他言語では本当に酷い)
こんな糞どうでもいいところを様々な書き方をしているような奴は雑魚だ。
上手い奴は、そいつが決めたやり方に従って、一定の書き方で書く。


172 名前:から、後で読み直すときも楽だってこと。
自分の手書き文字なら相当汚くても読めるだろ。それに近い。

基本的には意味のない手動インライン展開は止めた方がいい。
それは無駄に関数を大きくする。
関数呼び出しのコストが気になるなら、C++なら inline が用意されてる。
そもそもロックなんて糞遅いから、そこでCPU命令数個ケチる意味もないはずだが。

可読性を上げる為に最初にやるべきなのは、関数を分割して小さくすることだ。
呼び出しコストは考えず、分割しまくった方がいい。
結果、抽象度が上がり、読みやすくなる。(全体を読まなくても済むようになる)
[]
[ここ壊れてます]

173 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 03:30:32.78 ID:w8vcpguW.net]
あくまで、プログラマが初心者の場合の話だけど。

いろいろなソースを見てきたけど。
仕事としてやるなら、初心者は、なるべく関数化してほしくないかな。
練習としてなら、いいけどね。

関数化する等して、抽象化した方が見やすいソースになるかというと、
間違いじゃないけど、正しくもない。

有能なプログラマーが書いたソースは素晴らしいし、可読性も申し分ない、うん。
でも、クソなコードは、関数化しちゃいけないものが、関数化されているなどが原因で、
追跡が難くなるんだな。
オブジェクト指向を謳う言語のソースなんか、C以上にプログラマーの手腕によって、
可読性の差が生じてしまう。関数だけでなく、クラスの設計が腐ってて、どうしもないとかね。
そうゆうソースの追跡は辛いわ。

Cの場合、ぐちょくちょなソースの場合、関数化されていない方が、
コードのメンテ等で、強引に追跡する際は苦労が少ない、そんな感じ。



174 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 04:08:27.50 ID:rN/Im7Tc.net]
そんなこたねえよ
関数を作った方がいいしファイルを分けた方がいい
ネストは浅い方がいい

175 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 05:49:50.39 ID:OJr5a4rA.net]
>>116
なぜわざわざbreakなんて使うんだ?
素直にこれでいいでしょ
do {
LOCK
判断結果 = 判断
UNLOCK
} while(判断結果)






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<317KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef