18/08/16 23:36:02.22 fOCSKLtw.net
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
URLリンク(paiza.io)
URLリンク(ideone.com)
URLリンク(codepad.org)
C11
URLリンク(www.open-std.org)
C99
URLリンク(www.open-std.org)
URLリンク(kikakurui.com)
C FAQ 日本語訳
URLリンク(www.kouno.jp)
JPCERT C コーディングスタンダード
URLリンク(www.jpcert.or.jp)
前
C言語なら俺に聞け 146
スレリンク(tech板)
2:デフォルトの名無しさん
18/08/17 02:03:10.65 itWjjCCs.net
>>1
乙なんだな
3:デフォルトの名無しさん
18/08/17 04:59:04.13 xjFqJl5K.net
>>1
乙ってんね
4:デフォルトの名無しさん
18/08/17 07:32:18.55 TtX4VAeH.net
前スレ992
スレリンク(tech板:992番)
ちょっと何言ってるかわからん
983はナマポと何の関係があるのかと聞いているんだが??
5:デフォルトの名無しさん
18/08/17 09:26:07.17 VdqNpuZ9.net
>>1
おC
6:デフォルトの名無しさん
18/08/17 10:07:35.20 hKcJGgnp.net
>>1
乙curry
7:デフォルトの名無しさん
18/08/17 20:50:45.41 dgg8VvhO.net
>>4
ちょっとはググって言え。
使い道のないはずのイテレータをC++ではどう活用してるのか、
何故そんなことになるのか、考えてみろ。
8:デフォルトの名無しさん
18/08/17 20:54:30.35 dgg8VvhO.net
というかこのスレワッチョイ外されているんだな。
最近この手の荒らし多いな。
俺はワッチョイ無しのスレは気に入らないから、
>>4の疑問について、ワッチョイ無しのスレ(=このスレ)では答えないことにする。
まあもうヒントは十分に与えたし、馬鹿でなければ辿り着けるはずだが。
9:デフォルトの名無しさん
18/08/17 21:23:33.04 oMyhNvCc.net
イテレータへのこだわりは確かに謎。結局ローレベルな話なんだよね。
foreachという切り口だとイキるのが難しいということか。
10:デフォルトの名無しさん
18/08/17 21:26:26.11 2ZlVaol+.net
ナマポとプログラム言語の関係性はさっぱりわからない
11:デフォルトの名無しさん
18/08/17 21:41:35.78 zrmK36kH.net
アホ? list<T>::iteratorがナマポ撲滅のためとか本気で言ってるのか?
12:デフォルトの名無しさん
18/08/18 00:42:04.17 JHZyD4lZ.net
改めて明解C読んだけどどう考えても入門者向けじゃねえなこれ
これ最初に読んだせいで挫折した人多そう
13:デフォルトの名無しさん
18/08/18 01:38:53.00 MBfkrj0T.net
その教科書は教師を再生産するための商品
独学でどうにかするアイテムじゃあない
教科書の肝心のところに教師から教えてもらうフェイズがひっそりとしのばせてある
だから教師の関与が深い
補助の人間が必要な物品だよ
教科書を誰が買うかっていうと、先生がより先生っぽい演技・活躍を出来るアイテムを買うだろ
だから教師の再生産をするためのアイテムを教師が生徒に買わせるんだよ
教科書は生徒が買うんじゃなくて先生が買う、
そのフェイズでは教師の介在があってはじめて理解できるようなひっかけがなくちゃあならない、
だから「入門者向けじゃねえ」になる
14:デフォルトの名無しさん
18/08/19 16:42:31.78 Gtfg19Vf.net
C言語の入門書を読み終えて文法をある程度理解したところなんですけどこの次はどうしたらいいんでしょうか・・・
15:デフォルトの名無しさん
18/08/19 16:48:10.98 mbogTHsz.net
何かを作って見る
何を作るかは自分で決める
決められないときは、みんなに相談してみる
16:デフォルトの名無しさん
18/08/19 16:58:14.33 PTySIHXJ.net
>>14
アルゴリズムとデータ構造の本を一冊買って勉強しとけ
もちろんコードを書くんだ
コードを書かないならそんな本は買わなくてよろしい
17:デフォルトの名無しさん
18/08/19 17:25:20.88 ko+uHAy8.net
>>14
標準ライブラリの関数の仕様を調べつつ、自分で実装してみる
18:デフォルトの名無しさん
18/08/19 18:06:47.62 WWHW9JqB.net
printf と scanf のフォーマット処理は勘弁してください
19:デフォルトの名無しさん
18/08/19 18:41:28.69 vfinpyXk.net
ありがとうございますとりあえずアルゴリズムとやらの本を買います
20:デフォルトの名無しさん
18/08/19 21:04:33.17 FQWxbBlW.net
これどう?初心者だとちょっと難しいかも知れないが。
[改訂新版]C言語による標準アルゴリズム事典 Software Technology URLリンク(www.amazon.co.jp)
21:デフォルトの名無しさん
18/08/19 21:44:56.14 inem1Ikz.net
だめでしょ。
アルゴリズムイントロダクションがいいよ
22:デフォルトの名無しさん
18/08/19 22:58:10.05 akAD1DPm.net
事典は事典。最小限の解説読んであぁなるほどねって思える人用。
23:デフォルトの名無しさん
18/08/19 23:13:09.55 wM6XArJ0.net
詳説 Cポインタ、2013、オライリー・ジャパン
ポインターだけで1冊、本が書けるw
24:デフォルトの名無しさん
18/08/19 23:22:19.21 lk0ey+5M.net
引数に配列をとるとき
f(int* data)とf(int data[])の両方が有りだということは分かったのですが、基本的に後者の書き方をしてるコードはほとんど無くて大体前者な気がします。
これはなんででしょうか。後者の方がはっきり配列だとわかります。前者は配列を求められているのかただのint型のポインターを求められてるのか判断つかないと思うんです
25:デフォルトの名無しさん
18/08/19 23:23:37.77 mbogTHsz.net
ポインターってそんなに難しかったっけ?
26:デフォルトの名無しさん
18/08/19 23:26:29.60 6TZ29Z92.net
ポインタ本ならこっちの方がいい
新・標準プログラマーズライブラリ
C言語 ポインタ完全制覇 大型本
前橋 和弥 (著) 2017/12/7
27:デフォルトの名無しさん
18/08/19 23:55:12.29 wM6XArJ0.net
>>24
[ ] は、サイズが変わらない
* は、単なる先頭アドレスで、サイズが変わるかも知れない
28:デフォルトの名無しさん
18/08/20 00:01:28.25 FDfJ6Eqh.net
>>24
配列表記はアドレス表記のエイリアスだから区別するという発想がそもそもない
配列アクセスするコードならアドレスと配列のサイズを引数で渡す
29:デフォルトの名無しさん
18/08/20 00:03:41.14 OvqDIJZn.net
関数の引数としては配列であろうがポインタであろうが、ただのアドレスとしての意味しかない
30:デフォルトの名無しさん
18/08/20 00:12:09.78 V9a8ZDkH.net
>>29
配列でもポインタでも同じってことは分かってるでしょ
それでも元が配列なら配列で受けたほうが分かりやすいのでは?
という疑問だと思う
>>24
ぶっちゃけ、Cに慣れてくるとどっちでもたいして変わらない
配列で受けたいのならそうすればいい。
実際のところ、両方それなりに使われてる。
例えば、main() は int *argv[] にすることが多いんじゃないかな
多分だけど
31:デフォルトの名無しさん
18/08/20 00:19:11.88 houfzDz0.net
>>24
配列っぽい表記に惑わされて、sizeofして長さを求めようとしたというバグを何度か見ました。
32:デフォルトの名無しさん
18/08/20 00:26:25.44 ftO9aq8g.net
f(int data[100]) なんて渡し方だと、どう?
33:デフォルトの名無しさん
18/08/20 01:02:08.56 houfzDz0.net
そんな文法はない。
宣言としては有効かな。でも意味はないだろうね。ただのポインタ。
34:デフォルトの名無しさん
18/08/20 01:20:33.12 ftO9aq8g.net
>>33
じゃあ、これをポインタ表記に置き換えて見てください、お願い
35:デフォルトの名無しさん
18/08/20 03:08:45.92 k5zLgYIW.net
>>24
なるほど、じゃあ君は
void swap_int(int lhs[], int rhs[]);
と書いてもらえれば判断つきやすいんだな
36:デフォルトの名無しさん
18/08/20 04:14:23.20 GHO1XUgy.net
なんというか、Cならではの問題かな。
Javaもちょっと似てるか。
37:デフォルトの名無しさん
18/08/20 06:23:59.34 W9GZumqR.net
下のようなコードを書くとコンパイルエラーになるでしょ。
int ary[100];
int val;
val = ary++;
このaryは配列だから、ary自体の値を変化させる操作は出来ない。
それの類推で関数の仮引数はポインタで受けるんじゃないかな。
関数の中でポインタ風に使う変数はポインタの形で宣言。
関数内で値を変化させず [] によるインデクスだけでアクセスするなら
仮引数を配列の形で宣言するのも分かりやすい書き方かも。
後は歴史的な事情。
配列風に書くとインデクス計算に掛け算を使われて遅かった名残り。
>>30 俺はmainの引数は main(int argc, char *argv[]) だな。
保守的だけど、こんな場面で独自色出すことないしね。
38:デフォルトの名無しさん
18/08/20 07:23:53.30 iMQAgpc+.net
>>24
あんたの感覚は正しいと思う
同じだと言ってる奴もいるけど
foo(int a[]){
a = … /* エラー */
とか微妙に違う
ただそこまで気にする人があまりいないだけ
39:デフォルトの名無しさん
18/08/20 07:29:22.22 OvqDIJZn.net
関数の引数では配列の要素数は無視されるだけ
変数としての配列とポインタは別物だけど、関数の引数では全く同じもの
40:デフォルトの名無しさん
18/08/20 08:10:21.73 iwav6OWh.net
理由は既出だけど、C言語では配列とポインタは明確に違うよ。
相互変換可能なだけ。
41:デフォルトの名無しさん
18/08/20 09:01:16.78 KJZ73X54.net
ぶっちゃけ、相互変換可能ならその二つは同じじゃねえか?
数学的に
42:デフォルトの名無しさん
18/08/20 09:09:43.44 zNROsdOB.net
同じ点もあるし違う点もある
同じ点を強調したいときに「同じ」
違う点を強調したいときに「違う」
と言うだけ
具体的に語らないと何の意味もない
43:デフォルトの名無しさん
18/08/20 09:30:29.85 W9GZumqR.net
>>38
そのコード片、エラーになるかな?
仮引数のa(intへのポインタ)に
関数内で値を代入することは許されるはずだけど。
44:デフォルトの名無しさん
18/08/20 10:24:22.53 B6E8iGMG.net
代入ではエラーにならんと思うよ。
lvalueとして使えると思う。配列っぽく書けるがあくまでポインタ。
45:デフォルトの名無しさん
18/08/20 10:37:33.39 iMQAgpc+.net
>>43-44
すまん、お前らの言う通りだ
なんか勘違いしていたみたい
46:デフォルトの名無しさん
18/08/20 11:31:29.94 mV0yla1z.net
>>20
パクリで儲かる成功例
47:デフォルトの名無しさん
18/08/20 11:46:22.27 B6E8iGMG.net
引数の配列がホンモノだとすると、非NULLが保証されてないとあかん。
というか構造体渡しと同様の配列渡しが必要だな。まあ使わんか。
48:デフォルトの名無しさん
18/08/20 13:08:43.61 k5zLgYIW.net
>>37
その例は
void func(int ary[100])
{
int val;
val = ary++;
}
との違いを示そうとしているのだとしたら
int *val; じゃないとおかしいだろ
>>37
[]で書くべきと主張するんなら
char argv[][]にしなきゃねえ
もちエラーだけどw
49:デフォルトの名無しさん
18/08/20 13:28:58.98 HLNtX2wQ.net
>>47
ま、必要なら構造体の中に入れて渡すと。
50:デフォルトの名無しさん
18/08/20 16:12:09.36 K5YeoIjy.net
配列をパラメータにするのは
サイズが決まってる時にそれを明示したい場合くらいだな
ポインタの方が汎用性が高いから
51:デフォルトの名無しさん
18/08/20 16:14:24.46 K5YeoIjy.net
構造体みたいに
値渡しやコピーもあると(たまには)便利
52:デフォルトの名無しさん
18/08/21 07:18:10.26 gERn4ySS.net
>>50
void func(int ary[100]); これと
void func(int *ary); これが
意味が違うと思っているのか?
53:デフォルトの名無しさん
18/08/21 07:20:36.44 hlK4Wy69.net
設計意図を示すコメント的な意味ならあると思う
中身は同じだけど
54:デフォルトの名無しさん
18/08/21 07:38:47.67 Xgm2Pp2D.net
初心者に対して誤解を与えるだけじゃね?
必ずそのサイズで呼ばれると保証されるわけでもないし。
55:デフォルトの名無しさん
18/08/21 08:20:0
56:7.94 ID:FuTngql1.net
57:デフォルトの名無しさん
18/08/21 08:40:04.69 ZsMFgi2m.net
ほんとに警告出るのか?
サイズ指定に意味がないというのが規格だし、コメント程度の役割しか持たせたらあかんという気が
58:デフォルトの名無しさん
18/08/21 08:48:21.68 Y1HyydAv.net
gcc8でもclang6でも警告でなかったょ…
59:デフォルトの名無しさん
18/08/21 09:13:57.61 GIXT+l9b.net
お高い静的解析ツールだと警告出るかもね。
やってないから知らんけど。
そういう環境で開発できるならコメント以上の意味はあるかも。
仮定で申し訳ない。
60:デフォルトの名無しさん
18/08/21 09:28:29.44 gERn4ySS.net
>>55
おまえの主観は聞いてない
プログラムの実行結果が違ってくる例を示せ
61:デフォルトの名無しさん
18/08/21 09:30:24.31 Y6yN+LUK.net
>>59
屁理屈乙
62:デフォルトの名無しさん
18/08/21 09:31:42.61 hk/Hf9fq.net
>>48
多次元配列なら
void func(int ary{}[100])
{
}
とか
void func(int (*ary){}[100])
{
}
63:デフォルトの名無しさん
18/08/21 09:35:21.28 hk/Hf9fq.net
>>61
間違えた
void func(int ary[][100])
{
}
とか
void func(int (*ary)[100])
{
}
64:デフォルトの名無しさん
18/08/21 10:40:22.58 gERn4ySS.net
>>60
もう一度言う、おまえの主観は聞いてない
正論か屁理屈かはおまえの主観だ
客観的事実を示せ、理屈はそれからだ
65:デフォルトの名無しさん
18/08/21 10:57:00.63 vnB4usre.net
>>63
だれも機械の解釈の違いには言及してない定期
66:デフォルトの名無しさん
18/08/21 10:59:30.05 gERn4ySS.net
>>62
void func(int ary[][100]); これはできるのに
int func(void)[][100] これはできない
{
int ary[][100]; これもできない
ary = 0;
return ary;
}
extern int ary[][100]; と
extern int (*ary)[100]; は意味が違う
結局、[]で書くべきなんて主張は
通用しないところが多すぎる戯れ言だ
67:デフォルトの名無しさん
18/08/21 11:01:09.20 gERn4ySS.net
>>64
プログラム言語は機械に解釈させるためのものだ
自明なことを誰も言ってないなんてことこそ屁理屈そのものだろうが
68:デフォルトの名無しさん
18/08/21 11:01:29.60 +F/9g7TB.net
>>66
糖衣構文
69:デフォルトの名無しさん
18/08/21 11:02:23.89 gERn4ySS.net
>>67
全然関係ねえぜ
暑さで気が触れたか?
70:デフォルトの名無しさん
18/08/21 11:05:05.84 eIEuxTun.net
>>68
機械の解釈が同じでも人間には違う意味に見えるのはあるよな?
71:デフォルトの名無しさん
18/08/21 11:55:44.43 gERn4ySS.net
>>69
void func(int ary[100]); これのどこが
void func(int *ary); これの構文糖衣なんだ?
書いた奴の頭を疑わせる以外にどんな意味があるんだよ
72:デフォルトの名無しさん
18/08/21 11:56:39.26 gERn4ySS.net
サイズが100でなければならない関数なら
void func(int (*ary)[100]); こう書いて
int ary[100];
func(&ary); こう渡せよボンクラ
73:デフォルトの名無しさん
18/08/21 12:10:27.14 QteKsmYB.net
まあ多次元配列を引数にするのは良くないと思うわ
74:デフォルトの名無しさん
18/08/21 12:28:57.33 GIXT+l9b.net
>>71
どうした?
コードレビューで上司にボコボコにされた腹いせか?
こんなとこでイキっても虚しいだけやで。
75:デフォルトの名無しさん
18/08/21 12:29:15.96 GIXT+l9b.net
>>71
どうした?
コードレビューで上司にボコボコにされた腹いせか?
こんなとこでイキっても虚しいだけやで。
76:デフォルトの名無しさん
18/08/21 12:47:09.71 EQ4qcC3V.net
>>72
なぜ?
77:デフォルトの名無しさん
18/08/21 12:53:55.98 gERn4ySS.net
>>73
ここがム板ってことを忘れたか?
技術的な話で来い
78:デフォルトの名無しさん
18/08/21 12:54:14.69 m1oFA/yA.net
多次元配列の型は typedef で型名作っておけば楽なのでは?
79:デフォルトの名無しさん
18/08/21 12:56:41.15 Fhw28p93.net
>>68
>>76
この書き込みのどこが技術的な話なんだw
単にイキってるだけじゃん。
80:デフォルトの名無しさん
18/08/21 13:04:39.72 gERn4ySS.net
>>78
構文糖衣の話をしたんだが
構文糖衣と書いてないと読めないオツムなのか?
アホw バカwww
81:デフォルトの名無しさん
18/08/21 13:05:57.10 gERn4ySS.net
さて、買い物に行くぜ
妻子の夕飯を作らにゃならん
82:デフォルトの名無しさん
18/08/21 13:09:48.25 O6Fgkzwj.net
>>75
そりゃわかりにくいからだよ。
引数にするとCの多次元配列の嘘くささがよく表れるわ。
せめて構造体で包むとかして名前を付けた方がいいね。
83:デフォルトの名無しさん
18/08/21 13:09:58.77 EQ4qcC3V.net
>>71
無駄なコスト
84:デフォルトの名無しさん
18/08/21 13:10:23.54 RiLuNws8.net
>>70
それを糖衣構文というかどうかどうでもいいけど
だれも機械の解釈の違いには言及してない定期
>>50➡>>52
明示とは機械に対してではなく人間に対してのことを言ってるからこの返信は意味がずれてる
85:デフォルトの名無しさん
18/08/21 14:09:26.92 Xve8S0h8.net
超初心者です。
シミュレーターで動かしながら独学で学んでいるのですが、
scanfが動かない(スルーされる)ので困っています。scanfが動くシミュレーターってあります?
86:デフォルトの名無しさん
18/08/21 14:13:40.03 Xve8S0h8.net
今はpaiza.ioを使っています
87:デフォルトの名無しさん
18/08/21 14:16:15.27 Hz7fBosn.net
下の入力欄が空白じゃないの?
88:デフォルトの名無しさん
18/08/21 14:27:50.04 Xve8S0h8.net
解決しました。ありがとうございました。
89:デフォルトの名無しさん
18/08/21 20:15:22.43 FwleoeVd.net
for文でこんなのを発見したのです。
for(;;)
ご覧のとおりセミコロンがカッコ内に2つあるだけ。
これはどういうfor文でしょうか。
ググり方も分からないです。
90:デフォルトの名無しさん
18/08/21 20:17:35.28 bAEvazF4.net
無限ループ
91:デフォルトの名無しさん
18/08/21 20:22:25.64 i/CPlprw.net
昔からその書き方の無限ループを好む人は多い
俺が知ってる範囲だとカーニハンもその書き方を好んでいた
92:88
18/08/21 20:22:27.49 FwleoeVd.net
>>89
(*´Д`)ありがとうございました。
93:デフォルトの名無しさん
18/08/21 20:27:12.52 mIqstMqN.net
無限ループって言っても
大概は何かの条件で脱出するわけだから
while (条件) が一番わかりやすいと思う
あ、好みだろうから、反論は不要です
94:デフォルトの名無しさん
18/08/21 20:34:59.42 8p839GFL.net
>>92
俺も無限ループはwhile(TRUE)派だな。
静的解析で怒られるから使うなって人もいるけど。
これも個人の好みなので反論不要です。
95:デフォルトの名無しさん
18/08/21 20:45:15.49 FwleoeVd.net
無限ループには
for(;;)
while(1)
while(true)
などがあるようですが、驚いたことにfor(;;)がC言語の伝統的スタイルなんだそうで。
96:デフォルトの名無しさん
18/08/21 20:50:55.87 mIqstMqN.net
goto 笑
97:デフォルトの名無しさん
18/08/21 21:07:06.74 FuTngql1.net
do {
} while (true);
だな
98:デフォルトの名無しさん
18/08/21 21:12:46.13 xHZnBR+z.net
true って新しいCだと使えるの?
99:デフォルトの名無しさん
18/08/21 21:15:49.80 Bspmt0aQ.net
_Bool
100:デフォルトの名無しさん
18/08/21 21:18:05.52 mIqstMqN.net
while (1==1)
なんて
101:デフォルトの名無しさん
18/08/21 21:21:39.51 WLqP+HZB.net
for(;;)は無条件であることを的確に表現してる
条件が書いてないのはこれだけ
102:デフォルトの名無しさん
18/08/21 21:30:40.05 xHZnBR+z.net
そういややったことないけど while () はできないのかな?
できたらできたでなんか怖いがw
103:デフォルトの名無しさん
18/08/21 21:35:16.36 8p839GFL.net
>>100
冷静に考えると、何でfor(;;)の真ん中の条件式のとこ空欄でも正しい構文になるんだろうね。
for以外に条件式省略できる構文ってないよね?
104:デフォルトの名無しさん
18/08/21 21:39:06.78 xHZnBR+z.net
if () ができたらなんか嫌だな
105:デフォルトの名無しさん
18/08/21 22:56:19.30 7hn0MDmO.net
>>102
確かに…
106:さまよえる蟻人間
18/08/21 23:14:00.83 H0lJZ+G5.net
左右の式が省略できるから、ついでに真ん中の式も省略可能にしたんだろう。
107:デフォルトの名無しさん
18/08/21 23:18:17.02 mIqstMqN.net
二つのセミコロンも省略して良いことにしようw
108:デフォルトの名無しさん
18/08/22 01:03:40.03 Vm7yolE7.net
ループの話でふと思い出したんだけど、この書き方キモいと思う?
LOCK();
while (条件) {
UNLOCK();
LOCK();
}
UNLOCK();
109:デフォルトの名無しさん
18/08/22 01:07:46.55 srSdeWyK.net
きもいけどきもいだけだから必要ならそうする
Cだしね
110:デフォルトの名無しさん
18/08/22 01:11:58.05 +gfjb8L8.net
condwaitみたいなの、たまに書くと混乱するわ
111:デフォルトの名無しさん
18/08/22 01:18:33.81 J6lVaoNe.net
LOCKして、何かして、UNLOCKして解放する
わけではないんだ?
112:デフォルトの名無しさん
18/08/22 02:53:55.25 wb9Zg9xS.net
for (\(^o^)/)
113:デフォルトの名無しさん
18/08/22 06:53:07.59 Vm7yolE7.net
>>108
while (条件) で統一したいと思いつつ、この手の場合LOCK, UNLOCKのインデントがズレててキモいなといつも気になってしまう
まあどーでも良すぎていつも放置するが
>>110
アトミックな条件チェックの話
114:デフォルトの名無しさん
18/08/22 07:33:35.95 RPMrdt6N.net
>>112
手動でインライン展開する必要がなければ、普通は、
while (check_func()) {
}
bool check_func(){
LOCK();
bool retval = XXX; // check something here
UNLOCK();
return retval;
}
とする。
C++なら inline を付ければインライン展開時(元のコード)と似たようなオブジェクトコードが出ることになっている。
115:デフォルトの名無しさん
18/08/22 09:35:21.99 ULC6Ul0L.net
>>107
do {
LOCK();
UNLOCK();
} while (条件);
116:114
18/08/22 09:36:42.99 ULC6Ul0L.net
ごめん、ちがた
117:デフォルトの名無しさん
18/08/22 09:52:30.97 2YTphjWh.net
>>107
条件を判断するためだけにLOCK/UNLOCKを行うコードだとしたら最悪のコードだ
do {
LOCK
判断
UNLOCK
if (!判断結果)break;
} while (1);
素直にこうしなさい
118:デフォルトの名無しさん
18/08/22 11:11:08.70 yAP1ongv.net
条件判断が目的じゃないと思うぞ
119:デフォルトの名無しさん
18/08/22 11:35:04.81 yJL450CM.net
どこが素直なんだ
締め切りが迫ってバグが取れず
なりふり構ってらんなくなったやつが書く
イカレたコードでしかない
120:デフォルトの名無しさん
18/08/22 11:58:31.90 DbwOmzYq.net
>>116
これは酷いw
121:デフォルトの名無しさん
18/08/22 12:04:07.83 MGgq/0yt.net
イカれたコードを紹介するぜ
122:デフォルトの名無しさん
18/08/22 12:27:28.23 2YTphjWh.net
ん?
一番素直だろうが
条件判断の為だけにLOCKしてるという前提で
判断を関数に分ける?
分けるかどうかはこんなちっぽけな理由で判断するべきじゃないよ
判断の度に関数にしてたら意味不明な関数で溢れるぞ
もちろん意味が明瞭で他にも同じ判断を使う可能性があるのであれば
関数やマクロでパッキングすべきだが
123:デフォルトの名無しさん
18/08/22 12:36:44.83 yJL450CM.net
LOCK
判断
UNLOCK
というアトミックなシーケンスを関数にする理由はちっぽけじゃない
LOCK/UNLOCKが必要な具体的な場面を想定しての発言には見えない
124:デフォルトの名無しさん
18/08/22 12:50:05.96 2YTphjWh.net
どういう場面かなんて>>107では判断不能だし
分けるべきか分けないべきかも>>107では判断不能
判断出来ないのに
「わざわざ関数構成を変えるべき」
なんて主張をすべきじゃない
125:デフォルトの名無しさん
18/08/22 13:02:48.20 Xk7aTjF/.net
>>123
いやー、わからんのはあなたに実務もしくは勉強の経験がないからよ
126:デフォルトの名無しさん
18/08/22 13:14:18.16 yJL450CM.net
昨日のvoid func(int ary[100]);にしても
ary[1000]を警告する処理系の具体的な例が挙がってないしな
127:デフォルトの名無しさん
18/08/22 13:39:37.67 2YTphjWh.net
>>124
わからんねえ
エスパーじゃないんだから
経験が少なくて
分けないべき場面が思い浮かばないんだろうねえ
128:デフォルトの名無しさん
18/08/22 14:01:43.77 yJL450CM.net
間違いない、昨日のバカだ
NGIDっと
129:デフォルトの名無しさん
18/08/22 14:12:07.92 JOaq3c53.net
>>127
そういうあなたは昨日のイキってた方の人?
130:デフォルトの名無しさん
18/08/22 14:15:28.00 J6lVaoNe.net
パッと見て何をしているか分からないソースって
後の人が取っても苦労するし、気の毒
131:デフォルトの名無しさん
18/08/22 14:19:13.21 J6lVaoNe.net
多分書いた人の意図は
while文内の判定時に
LOCKしたいのかとは思うが
132:デフォルトの名無しさん
18/08/22 14:26:31.81 TfhbroeT.net
while ( ^∀^)
133:デフォルトの名無しさん
18/08/22 15:10:17.96 44OVOulF.net
check_func()というアドホックっぽい関数名が誤解のもとかな
get条件atomically()にすれば意図が明白
134:デフォルトの名無しさん
18/08/22 15:19:38.80 yJL450CM.net
atomicallyって文言いるかねえ
いちいち全部につけて回るより
LOCK/UNLOCKしてることは
忘れたフリができるほうがいいと思うが
135:デフォルトの名無しさん
18/08/22 16:17:52.89 BT6ndhEb.net
英語圏の人には for (;;) をまとめて熟語的に "forever" と読めて
座りがいいのかも知れん。
カーニハンとパイクの『プログラミング作法』に
それに近いようなことが書いてあった。
136:デフォルトの名無しさん
18/08/22 16:25:37.12 6OOlmfSC.net
>>133
条件取得の関数がすでにあってそれがアトミックでないケースも想定
137:デフォルトの名無しさん
18/08/22 16:31:28.34 UfcjGeQr.net
>>134
なるほどforeverか
そういう風にも読めるな
138:デフォルトの名無しさん
18/08/22 16:44:34.35 AU3mefLA.net
>>134
そう言われると確かに座りが良いかもしれんが、(;;)をeverと読むのか。。。
今の時代では顔文字の失敗作にしか見えんなw
139:デフォルトの名無しさん
18/08/22 16:54:07.40 yJL450CM.net
>>134
#define ever (;;)
とかやんの?
だったら
#define forever for (;;)
のほうがマシだと思う
>>135
空想論なら付き合ってらんねえぜ
140:134
18/08/22 17:01:35.42 BT6ndhEb.net
「その部分のループ、終了条件が色々なんでとりあえず for (;;) で回して」
みたいな口答でのやりとりで for (;;) を forever と読めば手っ取り早いでしょ。
while (1) で…よりも言いやすいんじゃないかと。
これは空想論だけどね。
141:デフォルトの名無しさん
18/08/22 17:28:26.65 yJL450CM.net
無限ループで済むことを
forの第2式を空欄で
なんて回りくどい言い方しねえよ
142:デフォルトの名無しさん
18/08/22 17:52:35.43 l5cdWJfA.net
>>140
別に回りくどくないし
良く見るコードだよ
いろんな人のコードを見たりしないの?
みんないろんなポリシーでいろんなコードを書くから
いろんな書き方を知っていた方が良いよ
143:デフォルトの名無しさん
18/08/22 17:59:10.07 l5cdWJfA.net
while (条件)
でしかループが組めないのはちょっとさみしい
無理やりこの形にするために
>>107みたいな意味不明なコードになる
144:デフォルトの名無しさん
18/08/22 18:07:38.93 yJL450CM.net
>>141
口頭でのやり取りつってんだろ
流れを読めよ
145:デフォルトの名無しさん
18/08/22 18:22:36.66 PnEe4J3b.net
マウント取りたくて必死なアスペだから仕方ない
146:デフォルトの名無しさん
18/08/22 18:30:03.99 l5cdWJfA.net
口頭で
forの第2式を空欄で
なんて発想は出て来なかった
147:デフォルトの名無しさん
18/08/22 20:52:31.01 ROURn6Ut.net
for ( ;∀;)
148:デフォルトの名無しさん
18/08/22 21:21:35.96 yJL450CM.net
> while (条件)でしかループが組めないのはちょっとさみしい
ここは同意
while(1) であろうが for(;;) であろうが同じこと
どっちかが好みで他方で書かれたからって可読性が落ちたとか騒ぐ
救いようのないドアホには付き合ってらんね
それだけだ
149:デフォルトの名無しさん
18/08/22 21:23:43.06 82KbBjx+.net
>>116を認めないお前も同じようなものかと
150:デフォルトの名無しさん
18/08/22 21:26:52.07 MwkxeX8r.net
whileで無限ループする場合、0じゃなければ1以外を
使ってもいいわけだがどうする?
電話番号とか使えばオシャレかもしれないよ
151:デフォルトの名無しさん
18/08/22 21:27:18.15 JglTnHlJ.net
とりあえず、おかしなのに絡まれた >>134 に同情を禁じ得ない。
152:デフォルトの名無しさん
18/08/22 21:28:19.40 yJL450CM.net
別にiocccのコードが読めろとか言ってない
int *aryがint ary[100]じゃなきゃ読めないとかぬかしたり
while(1)がfor(;;)じゃなきゃ読めないとかぬかす
想像を絶するアホには付き合ってらんねつってるだけ
lock/doit/unlockを関数化する必要性がわからないアホも含まれる
153:デフォルトの名無しさん
18/08/22 21:33:30.14 Jjipv9/i.net
>>151
「じゃなきゃ読めない」ってどこかに書いてたっけ?
そんな気はしてたが、やっぱり日本語不自由な人だったらしい。
154:デフォルトの名無しさん
18/08/22 21:42:00.39 yJL450CM.net
じゃあ喚くのやめろ
うるせえんだよ
155:デフォルトの名無しさん
18/08/22 21:43:08.30 Jjipv9/i.net
>>153
やっぱり日本語不自由な人なんだw
156:デフォルトの名無しさん
18/08/22 21:51:19.93 Vzjpb7lE.net
何がじゃあなのかわからない
思考がbool値しかないのか
157:デフォルトの名無しさん
18/08/22 21:51:23.19 wgajpaTM.net
アトミックな操作の意味がわかってたらああはならんのですよ
158:デフォルトの名無しさん
18/08/22 21:52:48.42 Vzjpb7lE.net
世の糞コードのほとんどはコミュニケーションの失敗により発生する
159:デフォルトの名無しさん
18/08/22 21:54:35.09 Jjipv9/i.net
C言語以前に日本語もちゃんと理解できない人と議論が噛み合うわけない。
相手しただけ損したわ、アホらしい。
160:デフォルトの名無しさん
18/08/22 22:02:56.29 yJL450CM.net
勝手に損してろ
誰にも賠償請求できない
泣き寝入りだな
アホw バカwww
161:デフォルトの名無しさん
18/08/22 22:05:01.83 Jjipv9/i.net
はいはい、ちゃんとにほんごをべんきょうしてりかいできるようになってから、かきこんでくださいね。
162:デフォルトの名無しさん
18/08/22 22:13:51.56 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
18/08/22 22:19:27.48 Vm7yolE7.net
非常にくだらない質問にレス付けてくれてサンクス
なんか荒れる原因つくってスマンかった
やっぱりあの書き方きめえよなあ・・・
164:デフォルトの名無しさん
18/08/22 22:57:41.03 RPMrdt6N.net
>>112
> LOCK, UNLOCKのインデントがズレててキモい
これは諦めろ。
酷い話、インデントがぴったり合ってないと駄目な奴はプログラマに向いてない。
どうやってもずれるからだ。
googleのコーディングルールにも昔は
・インデントを揃える努力は、キリがないしやるだけ無駄だから諦めろ
と書いてあったはず。(今見る限りないが)
ちなみにキモイ理由は、インデントではなくて、完全に入れ子になっていないからだ。
最近はこの「入れ子」の厳密さも増していて、XML(HTML等)では入れ子しか文法的に認めないだろ。
例えば、
<while>
</while>
ならありだが、
<lock>
<while>
</lock>
</while>
は駄目で、
<while>
<lock>
</lock>
</while>
にしなければならない。
165:デフォルトの名無しさん
18/08/23 00:15:44.74 wxGNRrqx.net
>>161
do while の標準的な使い方?
無限ループも標準的な使い方ですよ
do whileはforやwhileに比べてパフォーマンスが良いことがあるので
使える時には積極的に使う人もいます
do whileを一切使わない人もいますが
166:デフォルトの名無しさん
18/08/23 00:29:51.18 qYtPM3Ou.net
>>107
対称性保たれてるし、よくあるコードだぞ。
俺はキモイと思わん。
167:デフォルトの名無しさん
18/08/23 00:38:41.07 wxGNRrqx.net
ロックしたい対象がわかりづらい
同じ用途のロック/アンロックが2箇所ずつある
168:デフォルトの名無しさん
18/08/23 00:40:13.64 wxGNRrqx.net
C++の場合だと
無駄にロック期間が長くなる可能性がある
169:デフォルトの名無しさん
18/08/23 00:53:05.68 /qY100we.net
>>167
なんで?
170:デフォルトの名無しさん
18/08/23 00:59:32.58 HinwMmX/.net
頭が良い人ならすぐに意図がくみ取れるけど
メンテする人が必ずしも頭が良いとは限らない
コメント書いてもバグではまって始めて読まれたりするからね
ワザと作られた落とし穴なんて受けとられる危険もありそう
バカでも分かるような書き方をする方が安全かなと思う
171:デフォルトの名無しさん
18/08/23 01:59:34.18 y9Wx8uZn.net
>>164
>>116のコードは、while (1) で開始しても同じだし、(=do-whileを使う意味がない)
そもそも>>113に比べてメリットもないだろ。
そこで do-while 使う奴なんて皆無だと思うぞ。
まあそれでもやりたければやればいい。
個人開発ではメチャやって、その失敗を業務に生かした方がいい。
ただ、上達したければ、ある程度普通のコーディングルールで組んだ方がいい。(世間に合わせる)
自分と相手のルールが一致してたら、相手のコードも読みやすく、
結果、同じ時間、同じ努力でも読める量に違いが出てくるから。
あと、初心者はよく
・色々文法を知ってて、様々な書き方が出来る奴が偉い
と勘違いしがちのようだが、これは明確な間違いだ。(これは他言語では本当に酷い)
こんな糞どうでもいいところを様々な書き方をしているような奴は雑魚だ。
上手い奴は、そいつが決めたやり方に従って、一定の書き方で書く。
だ
172:から、後で読み直すときも楽だってこと。 自分の手書き文字なら相当汚くても読めるだろ。それに近い。 基本的には意味のない手動インライン展開は止めた方がいい。 それは無駄に関数を大きくする。 関数呼び出しのコストが気になるなら、C++なら inline が用意されてる。 そもそもロックなんて糞遅いから、そこでCPU命令数個ケチる意味もないはずだが。 可読性を上げる為に最初にやるべきなのは、関数を分割して小さくすることだ。 呼び出しコストは考えず、分割しまくった方がいい。 結果、抽象度が上がり、読みやすくなる。(全体を読まなくても済むようになる)
173:デフォルトの名無しさん
18/08/23 03:30:32.78 w8vcpguW.net
あくまで、プログラマが初心者の場合の話だけど。
いろいろなソースを見てきたけど。
仕事としてやるなら、初心者は、なるべく関数化してほしくないかな。
練習としてなら、いいけどね。
関数化する等して、抽象化した方が見やすいソースになるかというと、
間違いじゃないけど、正しくもない。
有能なプログラマーが書いたソースは素晴らしいし、可読性も申し分ない、うん。
でも、クソなコードは、関数化しちゃいけないものが、関数化されているなどが原因で、
追跡が難くなるんだな。
オブジェクト指向を謳う言語のソースなんか、C以上にプログラマーの手腕によって、
可読性の差が生じてしまう。関数だけでなく、クラスの設計が腐ってて、どうしもないとかね。
そうゆうソースの追跡は辛いわ。
Cの場合、ぐちょくちょなソースの場合、関数化されていない方が、
コードのメンテ等で、強引に追跡する際は苦労が少ない、そんな感じ。
174:デフォルトの名無しさん
18/08/23 04:08:27.50 rN/Im7Tc.net
そんなこたねえよ
関数を作った方がいいしファイルを分けた方がいい
ネストは浅い方がいい
175:デフォルトの名無しさん
18/08/23 05:49:50.39 OJr5a4rA.net
>>116
なぜわざわざbreakなんて使うんだ?
素直にこれでいいでしょ
do {
LOCK
判断結果 = 判断
UNLOCK
} while(判断結果)
176:デフォルトの名無しさん
18/08/23 06:27:06.53 OG65bZxS.net
>>173
breakしないと条件が偽の時にも処理が動いてしまうからでは
きっとループの中になんらかの処理があるはず
177:デフォルトの名無しさん
18/08/23 06:33:10.57 HkL3Bs+i.net
>>174
> きっとループの中になんらかの処理があるはず
書いてもないものが見える謎の病気w
178:デフォルトの名無しさん
18/08/23 07:24:39.71 qYtPM3Ou.net
>>172
分割しすぎも考えものだけどな。
>>113も視点移動が増える書き方で、可読性やメンテナンス性が悪いという人もいる。
179:デフォルトの名無しさん
18/08/23 07:52:07.91 wxGNRrqx.net
>>170
do while のが軽い場合がある
って常識だと思ったが
>>175
私も当然他の処理があると思った
無いとするとビジーループか?
これだと気持ち悪いとかいう以前の問題になる
180:デフォルトの名無しさん
18/08/23 08:12:35.84 wxGNRrqx.net
>>172
行数やファイルの数で値段が決まる業界の人?
181:デフォルトの名無しさん
18/08/23 08:16:18.32 wxGNRrqx.net
全てのLOCK/UNLOCKのペアはそれだけで関数にする
2重ループやループ内のswitch caseは使わないで関数に分ける
いろんな人がいるね
自分では本当に例外なく実践してるんだろうか
182:デフォルトの名無しさん
18/08/23 08:31:20.08 wxGNRrqx.net
宗教の例
gotoは使ってはいけない
2重ループは使ってはいけない
3項演算子は使ってはいけない
インデントは全て揃える
全てのリテラルは別途定義する
変数名に型情報を埋め込む
関数の途中でreturnしてはいけない
関数は小さいほど良い
条件分の中に関数コールや副作用のある文を書いてはいけない
インクルードファイルをネストしてはいけない
コメントは全て /* */ で (// や #if 0 を使ってはいけない)
全ての演算子のネストに対して ( ) をつける
全てのロック、アンロックのペアは関数に分けなければいけない
183:デフォルトの名無しさん
18/08/23 08:38:21.29 NBx27jJF.net
>>180
宗教の集大成がMISRAだな。
ほとんどがルールにあるわ。
184:デフォルトの名無しさん
18/08/23 08:41:48.74 KjqMFLSY.net
switch caseはは無駄にカラムを消費する。から嫌い。
185:デフォルトの名無しさん
18/08/23 09:21:50.49 itriZIP9.net
>>176
視点移動になるのは下手な関数化だ
サブルーチン呼び出しを1命令と読めるようにするのが
構造化プログラミングの本質
186:デフォルトの名無しさん
18/08/23 09:48:06.49 O7XDpWhz.net
>>183
ある程度の規模の関数になると結局その1命令に見えるはずの処理が正確に何してるかを理解するためには関数内を覗くはめになっちゃう。
覗かないですむほど関数仕様を単純化すると今度は関数が増えて管理の手間が増える矛盾。
後者のほうが正解なんだろうけど、なかなか理想通りには行かないよね。
187:デフォルトの名無しさん
18/08/23 09:52:28.00 XUhqK5T4.net
その方向性の行き着く先がオブジェクト指向
188:デフォルトの名無しさん
18/08/23 09:52:54.19 itriZIP9.net
>>184
ある程度の規模ってLOCK/UNLOCKの話だぜ?
189:デフォルトの名無しさん
18/08/23 10:01:30.20 O7XDpWhz.net
>>186
あ、そなの?
一般論かと思ってた。
190:デフォルトの名無しさん
18/08/23 10:11:39.46 rN/Im7Tc.net
>>178
ファイル数とか初めて聞いたよ。
疎結合高凝集は大抵の場面で正義だよ。トータル1000行のソースだったら好きにすればいいが。
あと関数にもファイルにも「意味のある名前をつける」
ある意味大変難しいんだがこれができれば保守性が全然違う。
191:デフォルトの名無しさん
18/08/23 10:34:14.06 3bgfj1QZ.net
規模は覗かないとわからんよ
1個の関数からしか呼ばれないたった3行の、
ただ単に特定のループの終了条件を示す為の関数
結局両方見ないと意味不明
こんな関数が山ほどあるプロジェクトは悪夢だ
192:デフォルトの名無しさん
18/08/23 10:36:26.67 rN/Im7Tc.net
エディタが悪いんじゃないか?
193:デフォルトの名無しさん
18/08/23 10:40:50.31 3bgfj1QZ.net
たった3行の為に
関数名を考え
関数ヘッダを作成し
プロファイリングや静的解析ツールやMAPの項目も増える
大きく依存した関数なのに
グローバル関数とローカル関数を分けて書くという宗教を理由に
全然別の場所に書く
最悪ですねえ
こういう人は
ifなども含め、複数文からなる全ての条件判断を関数にするんでしょうか
あり得ないですね
もちろん単なる1個のループの終了条件ではなくて
その条件に意味があって
他でも使う可能性があるなら関数に分けるべきですが
194:デフォルトの名無しさん
18/08/23 11:09:24.18 itriZIP9.net
>>187
改めて一般論をしても構わんが
195:デフォルトの名無しさん
18/08/23 11:29:56.84 rN/Im7Tc.net
プロファイリングのときってstaticな関数も同列に扱うもんなの?
196:デフォルトの名無しさん
18/08/23 11:40:17.42 HinwMmX/.net
ある程度の規模、って
サイトによって違うんだし
一般化はできないんじゃ
197:デフォルトの名無しさん
18/08/23 12:10:32.95 O7XDpWhz.net
>>194
地雷臭がするから煽るのやめとけってw
198:デフォルトの名無しさん
18/08/23 12:48:09.07 iNuWULI+.net
>>177
> 私も当然他の処理があると思った
> 無いとするとビジーループか?
> これだと気持ち悪いとかいう以前の問題になる
君のレベルが低いだけ
最近のプロセッサはロック/アンロックをハードウェアレベルで行うようになってるけどビジーループ自体は使われてる
スピンロック でググれ
199:デフォルトの名無しさん
18/08/23 15:13:34.14 HinwMmX/.net
>>195
アリガトス、鼻の敏感なお方
200:デフォルトの名無しさん
18/08/23 15:40:21.02 /qY100we.net
>>191
行数の問題じゃないんだよなあ
201:デフォルトの名無しさん
18/08/23 16:15:45.18 rN/Im7Tc.net
「長いから分割する」という発想で関数作ってる人は割といるんだよ。
そうするとまあコンテクストが広い範囲に分散してつらい。
202:デフォルトの名無しさん
18/08/23 16:28:54.58 EgEtgRif.net
そういえば昔客とソースレビューしてて、
引数チェックのための早期returnしてたら、
客「途中returnはやめてください」
俺「そうするとネストが深くなりすぎますよ?」
客「それなら関数に分けて下さい」
俺「分けた関数の先でも引数チェックするので同じですよ?」
客「それならその先の関数も別の関数に分けて下さい」
俺「…(反論するのめんどくせえ、言うとおりに作ってしまえ)」
結果、思い出すのも恐ろしい意味不明な関数ばかりのコードが出来上がったわ。
203:デフォルトの名無しさん
18/08/23 16:54:56.17 rN/Im7Tc.net
途中リターン禁止ってほんとアホだよね。要はreturnの否定だからな。
最近はMISRAからも外れてるらしいが
204:デフォルトの名無しさん
18/08/23 17:00:42.78 itriZIP9.net
>>191
単なる1個のループの条件に意味がないことなんてあるのか?
たった3行というがlock/unlockという2行で
他のタスクが干渉しないようにガードする必要がある条件だぞ
干渉されるとしたら何でだ? それでも意味がないのか?
205:デフォルトの名無しさん
18/08/23 18:14:09.43 wxGNRrqx.net
>>196
CASもLL/SCもアトミックなR-M-Wも使うけど
どう考えてもそんなコードじゃないだろ
知らない癖に書くなよ
206:デフォルトの名無しさん
18/08/23 18:30:50.97 9jasVWpA.net
そこまでローレベルの話じゃないと思うよ
無関係ではないけど
207:デフォルトの名無しさん
18/08/23 19:15:54.01 iNuWULI+.net
>>203
> 最近のプロセッサはロック/アンロックをハードウェアレベルで行うようになってるけど
って書いてあるのにCASとか出してくるアホ乙
208:デフォルトの名無しさん
18/08/23 19:28:43.42 k97Awv43.net
じゃあハードセマフォか?
それスピンロックじゃないよな
恥の上塗りwww
209:デフォルトの名無しさん
18/08/23 19:51:18.42 iNuWULI+.net
>>206 が必死にググって見つけて来た関係ありそうな(でも全く頓珍漢な)言葉 → ハードセマフォ
自爆志願者かよ w
210:デフォルトの名無しさん
18/08/23 19:59:05.89 k97Awv43.net
>>196自体がとんちんかんなわけだがwww
211:デフォルトの名無しさん
18/08/23 19:59:23.06 EgEtgRif.net
な、ここのスレは読解力が乏しいのにお互いにマウント取り合って傍から見たらアホちゃうのって奴が多いだろ?
よくもまあLOCK/UNLOCK如きで生産性のカケラもない議論できるわ。
よほど暇なんかな?
212:デフォルトの名無しさん
18/08/23 20:01:59.92 k97Awv43.net
LOCK/UNLOCKごとき
だよねえ
213:デフォルトの名無しさん
18/08/23 20:17:25.18 e3M4pNLl.net
ハードセマフォってなに…?
214:デフォルトの名無しさん
18/08/23 20:24:14.60 k97Awv43.net
ハードウェアセマフォ
215:デフォルトの名無しさん
18/08/23 20:25:47.93 HinwMmX/.net
C言語のはなしに戻ってくるのはあと何日先かな
216:デフォルトの名無しさん
18/08/23 20:27:03.48 k97Awv43.net
話題があれば
217:デフォルトの名無しさん
18/08/23 20:28:12.68 EgEtgRif.net
初心者でもベテランでも新しい気付きがあるような内容に早く戻るといいね。
218:デフォルトの名無しさん
18/08/23 20:49:36.75 EgEtgRif.net
400メートルなら連続で泳げるけど、800メートルはよほどペース落とさないと無理だわ。
219:デフォルトの名無しさん
18/08/23 20:49:53.03 EgEtgRif.net
あ、ごめんなさい。
誤爆しましたm(_ _)m
220:デフォルトの名無しさん
18/08/23 20:50:49.19 Uo7RxZ0m.net
400も800も違わんだろう
221:デフォルトの名無しさん
18/08/23 21:08:53.97 wxGNRrqx.net
違うだろ
222:デフォルトの名無しさん
18/08/23 21:13:49.03 ZsFwDbjK.net
>>200
客「(コイツらには二度と仕事頼まんとこ、無能すぎ)」
223:デフォルトの名無しさん
18/08/23 21:41:28.27 OJr5a4rA.net
>>208
ハードセマフォには敵わないよ w
>>211
ググればどんだけ頓珍漢かよくわかる
224:デフォルトの名無しさん
18/08/23 22:03:27.73 ZsGoqTtC.net
>>220
多分両方ともそれなりに正しい方法を知ってるのに
会話の祖語からとんでもないところに着地するケースだな
225:デフォルトの名無しさん
18/08/23 22:13:17.45
226: ID:y9Wx8uZn.net
227:デフォルトの名無しさん
18/08/23 22:16:11.26 y9Wx8uZn.net
>>177
> do while のが軽い場合がある
> って常識だと思ったが
それはお前が何も知らない初心者だから。
do while は初回のチェックが入らない分速い。(逆に言えば、その分だけしか速くない)
君は「なんだか知らないが do-while は速いんだ!」位の理解しかしてないだろ。
そんな馬鹿はC界隈にはいない。
問題は、この「初回チェックしない分速い」のをいちいち取り上げる必要があるか、という点で、
殆どの場合はどうでもいいから do-while は使われない。
ただし、どうしてもケチりたい場合は使われる。
(ルール等で駄目なら手動で初回部分だけインライン展開しても同じだが、それよりは do-while 使った方がいい)
禁止する必要はないけど、使う局面もない、といったところだと思うよ。
初回のチェックが必要ない=その前か上位で初回チェックが必要ないことを保証している、であって、
全くチェックしていないわけではないんだよ。
結果、処理を整理して集約していくと、while文に吸収されることもある。
或いはそうならないとして、ど頭でチェックだけして不要ならショートカットしたい等の場合、
別にチェック+ do-while になるが、それはメトリックスを増やしてしまう。(静的コールグラフ)
どのパスを通るかがデータ依存になり、それがかなり大きな区画になってしまうだろ。
それよりはショートカット出来ないけどどんなデータでも同じパス、
whileで弾かれて空振りするだけ、のほうがメンテナンスが遙かに楽なんだよ。
ここら辺はさんざんメンテナンスしてれば分かるようになるし、してないうちには分からない。
お前は相当それ以前だが。
「僕はdo-whileの方が速いケースもあるのを知ってるんだ!」ってのは痛いだけだから止めとけ。
自分でアホだと言っているようなものだ。
そんなことはみんな知ってて、その上で議論している。
コード分岐を増やすのが、1回のチェックを端折るのと釣り合うか?なんだよ。
228:デフォルトの名無しさん
18/08/23 22:18:42.67 wxGNRrqx.net
長文から悔しさがにじみ出てますよ
229:デフォルトの名無しさん
18/08/23 22:19:37.23 ZsGoqTtC.net
成功するまでリトライみたいなのってdo-while使わない?
230:デフォルトの名無しさん
18/08/23 22:20:37.13 wxGNRrqx.net
do {
} while (0);
こんなのもごくたまに
231:さまよえる蟻人間
18/08/23 22:22:18.83 Z2Fii0dD.net
do-whileはマクロで文をまとめるのによく使うよ。
232:デフォルトの名無しさん
18/08/23 22:23:48.32 wxGNRrqx.net
>>227のセミコロンを取ったヤツ
233:デフォルトの名無しさん
18/08/23 22:26:06.91 y9Wx8uZn.net
ただマジで、初心者はこの手の話に首を突っ込まない方がいい。
時間の無駄で、上達を阻害するだけ。
コードの美しさ/抽象レベル/分割/隠蔽/疎結合が必要なのは少なくとも200-1000行程度であって、
50行程度ならグダグダ言わずにベタで密結合で書き下した方が分かりやすい。
10行のプログラムを動かすにも苦労する初心者にも、
理解に少なくとも200行程度書ける腕前が必要な内容を教えるから空回りする。
(とはいえ、初段階の洗脳は必要悪だ、というのがJava教団であるが。
そしてFizzBuzzはイテレートするクラス、判定クラス、表示クラスに分割され、
イテレータがインタフェースとして活用される、というのが件の悪ノリだった)
1000行程度も書けない初心者は、まず1000行書けることを目指せ。(1000行程度なら勢いで書ける)
コードの美しさその他はその辺になればだんだん分かってくる。
その後に、自分で「コードを減らす」練習をした方がいい。
(コードを「書く」よりも「減らす」方が上達する、と言う奴は居て、俺もそう思う)
それまでは自分でコーディングルールの優劣を判定する頭もないのだから、(これはちゃんと認めた方がいい)
オレオレルールではなくて、コードを書いている連中のルールをそのまま使った方がいい。
俺はgoogleがいいと思うが。
(なお意識高い系C++erはgoogleのルールはもう古い!と言いだした模様。
俺は布教用のルールなんてゴミだと思っているが、まだチェックはしてない)
>>180-181
MISRAは「自分でどのルールが無駄か判断出来る人向け」であって、
お前らみたいな「自分では判断出来ない初心者向け」ではないんだよ。
素直にとりあえずgoogle使っとけ。
234:デフォルトの名無しさん
18/08/23 22:27:16.39 wxGNRrqx.net
こいつNG
235:デフォルトの名無しさん
18/08/23 22:28:37.43 y9Wx8uZn.net
>>184
> 覗かないですむほど関数仕様を単純化すると今度は関数が増えて管理の手間が増える矛盾。
管理の手間は増えないと思うが。
もし増えていると感じるのなら、それはCには階層がないことの弊害だ。
関数内関数が普通に使える状況であれば、
関数切り出しは「処理を纏めて名前を付けただけ」でしかなく、
外部からその関数が呼ばれることが文法的にないことを保証出来るから、手間は増えない。
そしてこの点に、妥協的だが現実的なのは「名前に階層も付けてしまう」だ。
つまり、AAA階層内の関数はAAA_get_data_idx()等にし、
もし仮にAAA_get_data_idx内でさらにローカル関数が必要な場合は、AAA_get_data_idx_BBBにしてしまう、というものだ。
関数名が長くなる点を除いて問題はないし、「grep出来るから便利」 by Linus。
OOPも実質同じで、フルパスで呼ぶなら AAA->get_data_idx->BBB()等、_ が -> に代わるだけだが、
実際はオブジェクトポインタ=途中のポインタだから、obj->BBB()となり、長くならずに済む。
(ただし、grep出来なくなる)
俺もCに階層記述能力がないのは問題だと思っているが、
現実的に分割/疎結合化が必要なのは200-1000行単位であり、
ここは「ファイル」(=モジュール)で分割しろ、というのがCだ。
だから不満ではあるが結果的に何とかなってしまうのも事実で、だからこそCがまだ生きながらえている、というのはある。
それにしても「関数内関数」は欲しいんだけどね。あと、ラムダも。
(gccでは前者は標準、後者はマクロで対応出来るが)
236:デフォルトの名無しさん
18/08/23 22:34:14.90 za+Z/fW8.net
>>230
1000業かけるお題を教えてください(。・´_`・。)
237:デフォルトの名無しさん
18/08/23 22:35:46.52 4VjbPjMt.net
親切に俺condwaitって書いたのに…
238:デフォルトの名無しさん
18/08/23 22:37:11.87 ZsGoqTtC.net
関数のレベル感あわせるのむずい
あわないだろ
239:デフォルトの名無しさん
18/08/23 22:49:21.25 OJr5a4rA.net
>>224
> do while は初回のチェックが入らない分速い。(逆に言えば、その分だけしか速くない)
違う、>>177はコンパイラがあまり賢くない時代の知識で止まってるロートルってだけ
240:デフォルトの名無しさん
18/08/23 22:50:32.61 /xlV6A++.net
現在通過中
風はそれほどでも無いが雨量がヤバい、尋常じゃない
241:デフォルトの名無しさん
18/08/23 22:50:52.78 /xlV6A++.net
誤爆した
242:デフォルトの名無しさん
18/08/23 22:50:52.87 wxGNRrqx.net
「軽い場合がある」
243:デフォルトの名無しさん
18/08/23 22:52:49.79 wxGNRrqx.net
デメリットは数文字ソースコードが増えるだけ
生成されるバイナリが悪くなることは無い
良くなる可能性はある
244:デフォルトの名無しさん
18/08/23 22:54:11.95 qYtPM3Ou.net
>>223
> それは正しく分割出来てないから。
そう。だから、>>113は正しく分割できていない、という人がいると書いたんだが。
245:デフォルトの名無しさん
18/08/23 22:54:57.75 wxGNRrqx.net
do while を使わない(使えない)人っているよね
246:デフォルトの名無しさん
18/08/23 22:57:34.92 wxGNRrqx.net
常に正しく分割されてるコードしかいじらないわけでも無いだろうし
常に正しく分割出来るとも限らないし
正しいか正しくないかは視点によっても違う
理想だけ語るだけで実際にコードを組んだ事が無さそうな人がいるようだけど
247:デフォルトの名無しさん
18/08/23 23:01:12.83 FIun2PeI.net
>>237
気圧申告しないと!
248:デフォルトの名無しさん
18/08/23 23:01:58.95 wCnARv+4.net
ワッチョイないのに結局レスするんか
249:デフォルトの名無しさん
18/08/23 23:03:30.31 NMfUyUL+.net
>>230
>FizzBuzzはイテレートするクラス、判定クラス、表示クラスに分割され、イテレータがインタフェースとして活用される、というのが件の悪ノリだった
どんなコードになるのでしょうか?一度みてみたいものです…
fizzbuzz はこんなコードを書いたことがあります
スレリンク(tech板:25番)
URLリンク(ideone.com)
250:デフォルトの名無しさん
18/08/23 23:18:47.64 y9Wx8uZn.net
>>226
具体例あるか?
それ以前に「成功するまでリトライ」自体がよろしくないが。
>>236
do-whileに対して何か特殊な最適化がかかるという話なら、
俺は知らんから突っ込めない。
が、そうだとしても、それでコードを汚すこと自体が間違いだが。
>>241
そう思うんならそれでいい。
平行線だし、議論しても結果は出ない。
君のコードを見て他の人がどう思うかはそれぞれの自由だ。
俺はこの場合関数に括り出す方を選択する。
同様の連中もここにいるだろ。それだけの話さ。
ただそれ以前に、アトミックなんて最初から関数に括り出されていると思うが。
インラインアセンブラを使う気でなければそもそも無理だし。例えば、以下。
URLリンク(msdn.microsoft.com)(v=vs.110).aspx
>>245
あー、8は俺だ。
ワッチョイありで立て直してくれればそっち行くわ。
(俺が立て直してもいいが)
251:デフォルトの名無しさん
18/08/23 23:43:58.22 y9Wx8uZn.net
>>246
俺の記憶では、「FizzBuzz Implementation in Java」みたいなタイトルでGitHubに在ったはず。(だが出てこない)
★も2000位ついていたと思った。
クレームついて取り下げるとも思えないから、検索順位下げられたんじゃね?
そんなに見たければ自分で探せよ。多分まだそのまま公開してると思うぜ。
252:デフォルトの名無しさん
18/08/23 23:45:37.65 Ml8TmHvL.net
1000行書けるお題を教えてください
253:デフォルトの名無しさん
18/08/23 23:49:35.97 HinwMmX/.net
宿題で出されているの?
254:デフォルトの名無しさん
18/08/23 23:52:07.74 NMfUyUL+.net
>>248
キーワードありがとうございます
これですね
URLリンク(github.com)
255:デフォルトの名無しさん
18/08/23 23:55:52.97 0/a4zf/K.net
>>249
RPGゲーム
これは26万行
URLリンク(github.com)
256:デフォルトの名無しさん
18/08/23 23:59:12.07 y9Wx8uZn.net
>>251
それだ。
(俺のキーワードが役に立ったようには見えないが…まあ辿り着けたようだしよしとしよう)
257:デフォルトの名無しさん
18/08/24 00:05:09.13 iMeaBiRp.net
>>247
> ただそれ以前に、アトミックなんて最初から関数に括り出されていると思うが。
そうだな。すでに atomic 実装されていたら俺も使うわ。
関わっているプロジェクトや文化にも依存するから、絶対はない。
例えば Kernel とかだと大半は関数化していない。俺は見た記憶がない。
まあそれだけの話。
258:デフォルトの名無しさん
18/08/24 00:16:45.53 O3WQJa8X.net
>>254
> 例えば Kernel とかだと大半は関数化していない。俺は見た記憶がない。
それソース出せるか?さすがに嘘だと思うぜ。
> C 言語ではアトミック操作を保証できないことから、Linux は基礎となるアーキテクチャーに依存してアトミック操作を提供します。
> URLリンク(www.ibm.com)
いちいちインラインアセンブラでは設計効率が悪すぎる。
APIにも当然用意されてるし、普通の人ならそれを使うし、Linusも当然そうだと思うけど。
根本的に「ロック」自体を勘違いしている気がするが。
259:デフォルトの名無しさん
18/08/24 00:18:45.88 iMeaBiRp.net
>>255
俺は見たことがないだけ。気になったら探してくれ。
260:デフォルトの名無しさん
18/08/24 00:34:08.73 O3WQJa8X.net
>>256
grepすれば出てきそうだが探す気はない。
linux kernel内でひたすらインラインされているとしたら、
おそらくスタック容量(1スレ当たり256バイトだったか?)の為だろう。
「関数化」はされていなくても「マクロ化」されていて、
ソースコード的には意味が同じという落ちじゃないか?
それなら君の噛みつき方は悪質だと思うがね。(意図的に議論を空回りさせててる)
261:デフォルトの名無しさん
18/08/24 00:37:30.88 iMeaBiRp.net
>>257
わざわざ自前で関数化していない、という話だぞ。
262:デフォルトの名無しさん
18/08/24 00:43:06.32 O3WQJa8X.net
>>258
それが論点のすり替えなんだよ。
分かってないようだからそれでいいが。
というわけでこの件は終わりだ。
263:デフォルトの名無しさん
18/08/24 00:44:16.19 iMeaBiRp.net
>>259
>>113 が自前で関数化する意図でしか読み取れないからな。
あれが自前実装でないというのであれば、それまでだ。
264:デフォルトの名無しさん
18/08/24 00:49:47.27 VJLc5wt0.net
ソースを示して、突っ込んだ話になることを期待w
265:デフォルトの名無しさん
18/08/24 00:53:41.22 ljcg8c0k.net
wktk
266:デフォルトの名無しさん
18/08/24 00:53:57.99 TjDOkMEc.net
そしてまた質問者が置き去りになるのであった
267:デフォルトの名無しさん
18/08/24 01:26:32.42 VJLc5wt0.net
C言語なら俺に聞け(答えるとは言っていない)ですか?
268:デフォルトの名無しさん
18/08/24 01:28:36.02 A5L5xSI8.net
>>253
「github にある」が重要なヒントとなりました
269:デフォルトの名無しさん
18/08/24 05:28:07.79 Nyovr5Qp.net
>>242
> do while を使わない(使えない)人っているよね
このスレでも>>161とかな
while(){}に比べたら使用頻度は低いけど使用する機会があるから多くの言語で使えるようになってるのになぜかdo~while使わない俺かっけーとか思ってそうw
ただ今どきパフォーマンスがいいからdo~whileにすると言うのはナンセンス
270:デフォルトの名無しさん
18/08/24 05:50:10.13 Nyovr5Qp.net
>>247
> 俺は知らんから突っ込めない。
知らないなら突っ込むなよ…
> do while は初回のチェックが入らない分速い。(逆に言えば、その分だけしか速くない)
とか馬鹿丸出しだぞ
271:デフォルトの名無しさん
18/08/24 05:54:34.00 Nyovr5Qp.net
>>255
あん
272:たの言ってるアトミック操作が>>107のLOCK/UNLOCKに相当する わざとなのか理解してないのかは知らんけどレイヤーの違うものを混ぜて語られてもそりゃ噛み合わんよw
273:デフォルトの名無しさん
18/08/24 07:43:07.97 ZkSPfVdV.net
>>247
コードを汚す?
do whileに慣れてないと
無限ループでdo whileを使うのがコードを汚す
になるのか?
274:デフォルトの名無しさん
18/08/24 07:52:13.74 ZkSPfVdV.net
>>266
> ただ今どきパフォーマンスがいいからdo~whileにすると言うのはナンセンス
forやwhileを選ぶ理由がある所でも
パフォーマンスを気にしてdo whileを選ぶべき
なんて話はしていない
どれを選んでも良いときに
forを選ぶ人、whileを選ぶ人、do whileを選ぶ人がいると言うだけ
275:デフォルトの名無しさん
18/08/24 07:57:40.75 ZkSPfVdV.net
わざわざCを使うってことは
8bitのチープなマイコン、チープなコンパイラだったり
OSやドライバの開発だったり
アセンブラも混ぜて使うこともありそうな
一番低級な高級言語
他の言語よりも記述方法によるパフォーマンスの差
が語られても良いと思う
276:デフォルトの名無しさん
18/08/24 07:58:09.19 KrjEv78J.net
自己防衛のためだけのレスになってきたな
そろそろこの話題も終わりかな
277:デフォルトの名無しさん
18/08/24 08:00:01.51 Hnd+Ihtp.net
ソース見て do {...} while (1); で無限ループになってたら
さすがに「なんで for (;;) や while (1) にせんの?」と尋ねるわ。
…でも「ループ先頭の(決して成立しない)終了判定が入らないから速いんだ」
と言われたら受け入れるかも。分かってやってるんだな、という意味で。
実際のところ for (;;) は無論のこと while (1) でも判定しないと思うけど。
278:デフォルトの名無しさん
18/08/24 08:06:02.46 ZkSPfVdV.net
>>273
3個とも超基本構文だと思うけど
そのレベルだと
「なんでfor(;;)なの?」って聞く人もいそうだな
279:デフォルトの名無しさん
18/08/24 08:10:04.46 29l6jjMs.net
そういやループの話でgoto使うってレスないな
ネストが浅くなるし好んで使う人は・・・さすがに居ないか
280:デフォルトの名無しさん
18/08/24 08:12:56.91 LUWnMn3S.net
無限ループって怖くね?
281:デフォルトの名無しさん
18/08/24 08:14:01.23 LUWnMn3S.net
>>274
K&R以来の伝統のCのイディオムだから?
282:デフォルトの名無しさん
18/08/24 08:16:04.10 ZkSPfVdV.net
goto label2
label1:
処理
label2:
条件判断
if (偽) goto label 1;
----
コンパイル結果的にはforやwhileはこんな感じ
条件が無かったとしても goto label2が入る
最適化しない場合やチープなコンパイラだと
このまま最適化されないかもしれない
goto label2
が不要な時にこれを除いたのがdo while
これのほうがバイナリはシンプル
283:デフォルトの名無しさん
18/08/24 08:18:32.35 ZkSPfVdV.net
>>175
多重ループから抜ける時
関数の終了処理
ガシガシに最適化をする時
使いどころはこんな感じ
284:デフォルトの名無しさん
18/08/24 08:18:56.33 ZkSPfVdV.net
アンカーミス
>>275
でした
285:デフォルトの名無しさん
18/08/24 08:30:42.38 ZkSPfVdV.net
gotoを使わない(使えない)人だと
多重ループから抜ける為だけにフラグを使ったり
多重ループから抜ける目的の為だけの理由で
関連する複数のループを分けたりする
double data[4][4];
例えばこんな構造のデータのある統計情報を返す関数
ただし、データに非有限値が入っていたらNaNを返す
デバッグ用に計算結果を出力するコードが入っている
どういうコードにする?
286:デフォルトの名無しさん
18/08/24 08:42:44.31 srP6ovAZ.net
>>270
> どれを選んでも良いときに
無限ループ以外にそんなケースあるか?
かつそれでdo~whileの方が効率的になるケース示してみ
287:デフォルトの名無しさん
18/08/24 09:30:50.97 L5DguHRe.net
マウント取りたくて必死w
288:デフォルトの名無しさん
18/08/24 10:27:50.33 tx++RsbT.net
do…whileの方が初回の判定がないから速いとしてもループ回数が多いと誤差レベルだし無限ループならコンパイラで最適化されて差がなくなると思う
289:デフォルトの名無しさん
18/08/24 10:54:27.69 ZlD+iWMs.net
4.3BSDのccを-Oなしで使った場合の話をまだしてるやついるのか
290:デフォルトの名無しさん
18/08/24 11:04:28.35 Cl8BSI3h.net
いろいろ誤解が多いので口出ししておく。
アセンブリ言語に手で変換してみるとすぐわかるんだが、
whileは先頭付近に条件分岐が必要な他に、末尾に必ず無条件のジャンプが必要。
対してdo-whileは末尾の条件分岐だけでいい。
このおかげでループ1回あたり命令実行が一つ減る。
しかしコンパイラはwhile文をif文とdo-while文相当に置き換えて最適化するから、差は出ない。
ヘボコンパイラなら最適化しないかもしれないが、
その場合は他の部分も最適化されるはずもないので、速度云々いうだけ無駄。
291:デフォルトの名無しさん
18/08/24 11:18:54.46 ZlD+iWMs.net
そんな誤解しかねないやつ
いるとしたらおまえだけ
292:デフォルトの名無しさん
18/08/24 11:36:54.26 /2nrSUYs.net
do whileは最後に条件を書くのが気に入らないので使わないです
293:デフォルトの名無しさん
18/08/24 11:38:27.58 C22mUEBr.net
環境に依る 以上
294:デフォルトの名無しさん
18/08/24 11:40:55.91 7MrYBE0R.net
使いどころを知らない自慢
forはwhileの上位互換だからwhileを使わない
ていうならまだわかる
295:デフォルトの名無しさん
18/08/24 11:44:59.31 7MrYBE0R.net
>>282
1回目が必ず条件TRUEになることがわかっているwhileループ全て
話題は無限ループだけど
296:デフォルトの名無しさん
18/08/24 12:22:55.87 srP6ovAZ.net
>>286
> しかしコンパイラはwhile文をif文とdo-while文相当に置き換えて最適化するから、差は出ない。
if文?
do ~whileに置き換えて単に最後の条件文に飛ぶジャンプ命令入れるだけだぞ
297:デフォルトの名無しさん
18/08/24 12:29:41.83 9+ua1c/R.net
アセンブラのジャンプ命令や条件分岐の使い方が分かってない様子だね
ループ全体で命令が1回増えるだけなのにループ1回当たりの命令実行回数が増えるとか言ってるし
298:デフォルトの名無しさん
18/08/24 12:30:27.52 7MrYBE0R.net
----gotoの使用例----
for (y = 0; y < 9; y++){
. . for (x = 0; x < 9; x++){
. . . . if (判定) goto break_loop;
. . . . 処理
. . }
}
break_loop:
----do whileの使用例----
if (FindFirst()){
. . do {
. . . . 処理
. . } while (FindNext());
}
299:デフォルトの名無しさん
18/08/24 12:31:56.80 srP6ovAZ.net
>>291
> 1回目が必ず条件TRUEになることがわかっているwhileループ全て
それ1回目は必ず実行してその結果で2回目以降を実行するかどうかを決めるってことだよね?
典型的なdo~whileパターン w
むしろそのパターンでwhile(){}使ってるなら単なるアホとしか思えない
300:デフォルトの名無しさん
18/08/24 12:34:47.80 7MrYBE0R.net
>>295
>>294の上のようなループを書くことない?
この場合はforだけど
301:デフォルトの名無しさん
18/08/24 12:35:02.93 srP6ovAZ.net
>>293
昔の話をしてるなら>>286の前半読め
今の話をしてるならそんなことみんなわかってるからいちいちドヤるな
302:デフォルトの名無しさん
18/08/24 12:38:53.07 srP6ovAZ.net
>>296
それは実行結果でループ制御してるわけじゃないだろ
x, y の値はループに入る時には条件満たしているべきだからdo~whileなんて使っちゃダメ
303:デフォルトの名無しさん
18/08/24 12:39:50.18 TJU8554I.net
do whileってそんな語ることあるの?良くも悪くも単なる構文だと思うけど
ダラダラと長いループだと継続条件が下方に隠れるので嫌ってのはある
それ以外は正直どうでも良い
304:デフォルトの名無しさん
18/08/24 12:40:30.21 7MrYBE0R.net
>>297
今とか昔とかじゃなくて...
PCのプログラムしかしたことが無い人は分からないだろうけど
組み込みのチープなマイコンのコンパイラは
いまだに糞なのはたくさんあるよ
あと、
様々な事情により最適化をOFFにして出荷する事もある
305:デフォルトの名無しさん
18/08/24 12:40:57.41 7MrYBE0R.net
>>298
その条件、何か関係ある?
306:デフォルトの名無しさん
18/08/24 12:42:26.92 7MrYBE0R.net
>>299
単なる構文を無条件で悪とする人がいるって話
307:デフォルトの名無しさん
18/08/24 12:53:42.33 90B7//Ue.net
みんな議論に夢中で楽しそう w
308:デフォルトの名無しさん
18/08/24 13:07:51.92 sQPXKPEp.net
>>299
gotoも単なる構文だしね
あるものは便利に使っていこう
309:デフォルトの名無しさん
18/08/24 13:32:55.56 Dz3bxc41.net
URLリンク(twitter.com)
俺は毒舌だから~、ズバッと切れ味鋭いことも言っちゃうよ~w、みたいな人、その意見が的を射ていない場合マジでイタイ奴だから気をつけろよ。
勘違いしてる奴けっこういるぞ。
斜に構えて逆張りするならそれなりに思考深めて来ないと。
田端さんとか意見が的外れだったらただのイヤな人だ(笑)
URLリンク(twitter.com) (5ch newer account)
310:デフォルトの名無しさん
18/08/24 13:41:35.51 B0ktSP35.net
構造体はメモリのスタックとヒープのどちらに格納されるのでしょうか?
311:デフォルトの名無しさん
18/08/24 13:53:06.07 MEArwTdw.net
>>306
書き方次第でどちらにもなりうる。
ポインタ変数作って自分で malloc() 等で初期化すればヒープになる。
関数の中で stastc 付けたり関数外で宣言すると data や bss 領域になると思う。
関数内で static 付けずに自動変数として宣言すれば多分スタックになる。
しかし、必ずそのようなコードを作るコンパイラにしなければならないという決まりはない。
312:デフォルトの名無しさん
18/08/24 16:55:09.53 MmiOMKcQ.net
「C言語」の名前の由来はB言語の後継だからというのは有名だけど、B言語って何でB言語?A言語はないのに。
313:デフォルトの名無しさん
18/08/24 17:04:10.98 YufcJqyf.net
BCPLが元だからB
314:デフォルトの名無しさん
18/08/24 17:05:27.92 MmiOMKcQ.net
>>309
BCPLってどんなん?
PL/Iなら知ってるけど。
315:デフォルトの名無しさん
18/08/24 17:15:25.56 ZlD+iWMs.net
>>310
世話のやける子やなあ
URLリンク(ja.wikipedia.org)
316:デフォルトの名無しさん
18/08/24 17:15:27.99 sQPXKPEp.net
>>310
CPLの簡単版
317:デフォルトの名無しさん
18/08/24 17:15:41.51 C/3CctmU.net
BCPLの元となったのはCPL
経緯は、CPL→BCPL→B言語→C言語
URLリンク(ja.wikipedia.org)(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E)
318:デフォルトの名無しさん
18/08/24 17:31:50.43 MmiOMKcQ.net
へー、BLCLってぱっと見Fortranぽいね。
時代を感じるわ。
C言語みたいにnotationが基本lowercaseになったのって画期的だったのかもね
319:デフォルトの名無しさん
18/08/24 17:41:34.02 C/3CctmU.net
つ EBCDIC
320:デフォルトの名無しさん
18/08/24 17:51:17.23 srP6ovAZ.net
>>300
だからそういう話なら
> 昔の話をしてるなら>>286の前半読め
って書いてあるだろ
応用力ないのかよ w
321:デフォルトの名無しさん
18/08/24 17:51:17.53 MmiOMKcQ.net
うちの会社って、まだHungarian notationを強制しようとする人がいるんだけど、make excessiveせずに説得するにはどうしたら良いでしょうか?
322:デフォルトの名無しさん
18/08/24 17:53:50.92 srP6ovAZ.net
>>301
あんたにはないのかもね
別に全てに人に同意してもらおうとは思ってない
色々おかしい人はいくらでもいるし
323:デフォルトの名無しさん
18/08/24 18:14:41.54 ZkSPfVdV.net
>>316
昔話じゃないって言ってるの
そもそも>>286が間違ってる
324:デフォルトの名無しさん
18/08/24 18:40:16.19 1mvArulW.net
>>319
どこが?
325:デフォルトの名無しさん
18/08/24 1
326:9:11:10.10 ID:s18ZTF9u.net
327:デフォルトの名無しさん
18/08/24 19:16:16.69 C/3CctmU.net
>>320
これだろ
>whileは先頭付近に条件分岐が必要な他に、末尾に必ず無条件のジャンプが必要。
whileの処理構造ならループ開始直後に条件判定の個所に(1度だけ)無条件ジャンプしてしまえば、あとは条件分岐を繰り返すだけで無条件ジャンプを再び使うことはない
ぶっちゃけ条件判定が先頭付近にあろうが末尾にあろうが何処でもいい
(do-whileの構造だと必ず一度は処理を実行する必要があるのでそんなことは出来ないけど)
328:デフォルトの名無しさん
18/08/24 19:23:07.44 YufcJqyf.net
先頭のほうがええやろ
329:デフォルトの名無しさん
18/08/24 19:28:22.47 MmiOMKcQ.net
>>321
日本人なんだけど日本育ちじゃないのでニュアンスをどう伝えたら良いのか分からないのですみません
330:デフォルトの名無しさん
18/08/24 19:30:09.95 1mvArulW.net
>>322
それがdo-while構造に最適化してるってことでは?
331:デフォルトの名無しさん
18/08/24 19:37:04.31 C/3CctmU.net
>>323
C言語のソースと直接対応させるならそのほうがその方が素直といえば素直だけどね
条件分岐命令はジャンプ範囲に制限があることがある(-128~+127byte程度)ので下手すれば多段ジャンプを強いられることがある
アセンブラレベルでギリギリの調整をするときはループ構造が制約されることもあるよ
332:デフォルトの名無しさん
18/08/24 19:50:21.18 rXR3rzpw.net
条件分岐で飛び先を相対で1バイトで指定しなければならないがそれ以上飛ばしたいなら逆の条件で無条件ジャンプによるループを抜けるようにすれば良いだけでは?
333:デフォルトの名無しさん
18/08/24 19:52:23.26 s18ZTF9u.net
>>324
マジかよ
334:デフォルトの名無しさん
18/08/24 19:59:34.12 ZkSPfVdV.net
>>320
>>278
わざわざ普通のコンパイラの結果を書いてあげてるのに
335:デフォルトの名無しさん
18/08/24 19:59:55.12 C/3CctmU.net
>>327
その方が適切な場合であればそうする
結局のところコンパイラの吐き出したバイナリをアセンブラでチューニングするような状況だと少しでも所要クロックが少なく命令バイト長が短くなるようにロジックを弄るんだよ
336:デフォルトの名無しさん
18/08/24 20:05:00.35 s18ZTF9u.net
ぼくのコードを評価してください
URLリンク(ideone.com)
337:デフォルトの名無しさん
18/08/24 20:11:20.96 ZkSPfVdV.net
>>331
趣味の押し付け合いを望んでる?
338:デフォルトの名無しさん
18/08/24 20:11:35.07 s18ZTF9u.net
>>332
はい
339:デフォルトの名無しさん
18/08/24 20:13:15.06 YufcJqyf.net
いや、後ろにあると見づらいだろ
340:デフォルトの名無しさん
18/08/24 20:13:19.64 ZkSPfVdV.net
弱すぎて話にならん
341:デフォルトの名無しさん
18/08/24 20:15:18.17 dK+ILFnq.net
>>331
関数にコメント書いてない
0点
342:デフォルトの名無しさん
18/08/24 20:18:15.07 s18ZTF9u.net
>>336
なるほど
343:デフォルトの名無しさん
18/08/24 20:18:52.05 s18ZTF9u.net
>>335
コーディングを評価してください
344:デフォルトの名無しさん
18/08/24 20:21:05.45 ZlD+iWMs.net
コメントする必要がないのが100点満点なんだが
345:デフォルトの名無しさん
18/08/24 20:27:27.38 rXR3rzpw.net
これはダメだ。もう何を言っても無駄だろう。
と思わせれば100点である、と。
346:デフォルトの名無しさん
18/08/24 20:30:03.18 QHdFlAyZ.net
>>331
ネスト不快
347:デフォルトの名無しさん
18/08/24 20:33:17.73 s18ZTF9u.net
>>341
なるほど
348:デフォルトの名無しさん
18/08/24 21:19:21.07 ZkSPfVdV.net
関数分け
いまいち
STATE *state
const でいいところもconstが無い
COL/ROW
名前がサイズじゃなくて位置っぽい
board[x][y]
board[y][x]の方が良いことあるかも
key
ifの羅列よりもswitch case
ways
static constをつけよう
directions
return で8個orしてるのがいやだ
名前
規模のわりに名前が長い
srand
なんで何回もよぶ?