C言語なら俺に聞け 152

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (アウアウウー Sa4f-7DQ/)
垢版 |
2019/06/17(月) 18:27:10.41ID:3L1/L9kLa
!extend:checked:vvvvv:1000:512
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/

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

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

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

JPCERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/
-
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
※前スレ
C言語なら俺に聞け 151
https://mevius.5ch.net/test/read.cgi/tech/1554171817/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
2019/07/15(月) 10:40:21.72ID:r5uSGSCiM
愛繆私は未定義な理由について理解できません。
なぜなら、演算規則に従い前置インクリメントを代入の評価より先に行えば、389の結果は一つと決まるからです。
しかし、評価順序が未定義となりコンパイラに依存となる理由は何ですか?
この式を定義することによる問題の例を理解したいです。
2019/07/15(月) 10:44:14.06ID:mPPf+F39a
左辺は
2019/07/15(月) 10:45:20.28ID:r5uSGSCiM
つまり、私は未定義と規定されている理由を知りたいです。
定義することで発生する問題の例などです。
2019/07/15(月) 10:49:35.01ID:6m2OA1zn0
この人の言ってる「演算規則」って何なんだろうね。
「C言語 "演算規則"」でググっても、それらしきものは出てこないし。
2019/07/15(月) 10:57:10.32ID:r5uSGSCiM
int i = 0, j = 0;
int x = i++;
int y = ++j;
これです。xでは代入の後に後置インクリメントされます。(x = 0)
yでは代入の前に前置インクリメントされます。(y = 1)

s[i] = ++i + 1;
つまりこの式では代入の前に前置インクリメントされます。(次と等価です、)
i = i +1;
s[i(==1)] = i(==1) + 1;
2019/07/15(月) 10:59:07.47ID:mPPf+F39a
>>414
だから、左辺は
2019/07/15(月) 10:59:28.08ID:r5uSGSCiM
これは、未定義と規定されていますが、理由が理解できません。
私が示した通り、定義することによる問題の例は何ですか?
2019/07/15(月) 11:01:03.87ID:r5uSGSCiM
389の中では、左辺はs[1]です。
なぜなら、代入より前にiが前置インクリメントされます。
2019/07/15(月) 11:01:37.73ID:r7SsHRFS0
i++のポストインクリメントとi+1の評価順が不定だから
2019/07/15(月) 11:02:04.90ID:E9YINa1F0
これ読んで分からないなら諦めろ


未規定の動作とは、複数考えられる動作のうち、どれが実行されるかの要求が課されない動作のこと。
未規定の動作への依存で移植性が低下します。

未規定の動作
・部分式が評価される順序、及び副作用が発生する順序。
ただし関数呼出しの()、&&, ||, ?:, カンマ演算子は除く。(6.5)
・代入演算子のオペランドが評価される順序。(6.5.16)

未規定の動作
http://www.c-lang.org/detail/unspecified_behavior.html
未定義の動作
http://www.c-lang.org/detail/undefined_behavior.html
2019/07/15(月) 11:04:11.05ID:r5uSGSCiM
i++のポストインクリメントとi+1の評価順が不定な理由は何ですか?
2019/07/15(月) 11:07:31.48ID:r5uSGSCiM
i = i++;
これが未定義なのは理解できます。
しかし、389の中で私が示した通り、の定義をすると発生する問題の例は何ですか?
2019/07/15(月) 11:09:44.83ID:ex33LrHm0
未定義な理由?
言語作った奴がそう決めたから
要するに「仕様だから」
そう決めた理由は想像になるけど最適化しやすい(と言うかそうしないと最適化の妨げになる)と考えたんだろうと思うよ
2019/07/15(月) 11:12:06.88ID:mPPf+F39a
>>419
なんで?
その添字いつ評価されんの?
演算子[]の中身だよ
カッコだけどvoid書いちゃだめだよ
426デフォルトの名無しさん (ワッチョイ 17d2-rBUL)
垢版 |
2019/07/15(月) 11:12:37.37ID:3cpTbRIL0
インクリメントは式全体の前か後に実行されるからだろ
式の途中で実行されるとかあるの?
2019/07/15(月) 11:19:52.48ID:r5uSGSCiM
定義すると最適化の妨げになるという理由は、私には反論する知識は全くないので了承します。私は理解しました。
2019/07/15(月) 11:22:41.60ID:r5uSGSCiM
425の中で、書かれているように、実際には、演算規則でsのインデックスは0でした。
私は[]の優先を見落としていましたが、私が述べたかったことは、演算規則の優先で順番は決定できると思うことでした。
429デフォルトの名無しさん (ワッチョイ 17d2-rBUL)
垢版 |
2019/07/15(月) 11:23:12.12ID:3cpTbRIL0
最適化の妨げにはならないだろ
コンパイラー簡単に作れるとかじゃないの
2019/07/15(月) 11:25:19.08ID:b7u0RgVG0
現行のCの仕様に文句があるなら、ANSI?ISO?の仕様策定に参加でもすればいいんじゃね?
2019/07/15(月) 11:29:05.40ID:IpJNQ16e0
>>411
すまん
俺はとんでもない失言をしていて
突っ込まれるの覚悟しておとなしく待ってたんだが
2019/07/15(月) 11:36:42.62ID:ZvCggxzR0
一通り勉強しましたが、次に何をやったらいいのか分かりません!
何も作れません!
どうしたらいい?
2019/07/15(月) 11:38:20.09ID:mPPf+F39a
>>428
そりゃ決定するための規則を作れば決定するけど、めんどくさいじゃん
2019/07/15(月) 11:39:31.38ID:E9YINa1F0
>>432
作りたいものが無いなら無理に作らんでもいいじゃん
2019/07/15(月) 11:40:09.15ID:3cpTbRIL0
>>432
散歩したり 景色を見たり…
昼寝したり 何もしない
そのうちに急に書きたくなるんだよ
2019/07/15(月) 12:05:05.25ID:ex33LrHm0
>>426, >>429
> インクリメントは式全体の前か後に実行されるからだろ
> 式の途中で実行されるとかあるの?
どのように実装してもいい
並列に処理することすら可能
と言うような最適化を妨げないための仕様
2019/07/15(月) 12:24:44.13ID:E9YINa1F0
要するに++,--は混ぜるな危険ってこと
2019/07/15(月) 12:36:46.00ID:IpJNQ16e0
能なしど低脳
2019/07/15(月) 12:47:17.16ID:0wrdUuzC0
>>403
>while((s[i++] = t[i + 1]) != '\0') ;
for(;(s[i] = t[i + 1]) != '\0';++i) ;
これじゃ駄目な理由ってなんだろう
2019/07/15(月) 12:55:44.11ID:wne2EA+X0
評価順序以前にループ条件が直感的に分かりにくい様なコードは書くべきでない
2019/07/15(月) 12:56:34.33ID:14ut6KBx0
for(@;A;B)

この123が全部必要だと思ってるんじゃね
2019/07/15(月) 13:04:03.21ID:Voexy70f0
>>431
こちらこそすまん。>>411>>410宛ではなく>>409宛だった。
2019/07/15(月) 14:30:35.03ID:y88H95dP0
MISRA-C 2004 の100ルールを守っていないソースコードは、読むに値しないw

まず、コーディングルールを5年勉強しろ!w
2019/07/15(月) 14:33:44.55ID:Voexy70f0
>>443
その特徴的な書き方はいつものRuby大好きマンか?
バカなこと言ってないで巣に帰れ。
2019/07/15(月) 15:05:29.64ID:Nn+acajv0
>>443
MISRA なんて鎖や束縛を作りたがる「管理職」の思考法でしょう?なんでそんなものに従わなければならないのでしょうかね
2019/07/15(月) 15:14:40.80ID:mPPf+F39a
ルールはあってもいいけど、MISRAはあれアホだよね。
考えたやつお前はCを使うなよっていう。
2019/07/15(月) 15:25:22.82ID:ex33LrHm0
>>446
どこがアホなのか詳しく書いてみ
2019/07/15(月) 15:26:34.84ID:mPPf+F39a
>>447
rubyが嫌になったってことですか?
2019/07/15(月) 15:28:03.17ID:Nn+acajv0
>>446
あの阿呆なMISRAを制定した人間の種族はなにか、どんな属性か?得意な思考方法、苦手な思考方法は?信条・信念は?
というところには興味があります、そのためだけに MISRA を読んでいたりします
450デフォルトの名無しさん (ワッチョイ 7602-24gz)
垢版 |
2019/07/15(月) 16:02:12.44ID:3UWFYY1V0
>>432
自分が作りたいものを作れ。
作る技術がまだ足りないならそれについて学習したり研究したりしろ。

一つ間違えてはいけないことは、自分の作りたいものを今の自分が持っている技術力で出来る範囲内に無理に収めないようにすることだ。
収めれば実現はたやすいが飛躍はできず本当にやりたかったことには届かない。
2019/07/15(月) 16:06:07.03ID:QcIx6aGf0
MISRAは実際の不具合を分析して作られたいわばバットノウハウ集だけど、言い換えると最低限のバカ避け。
バカがバカな不具合出すもんだからその他の人が迷惑を被る。
ま、バカはプログラム作るなって事だ。
2019/07/15(月) 16:14:22.25ID:y88H95dP0
組込み開発者におくるMISRA‐C:2004―C言語利用の高信頼化ガイド、MISRA‐C研究会、2006

この研究会は、トヨタなど大企業から、数十人のベテが集まって、
欧州人に聞きながら、完成された本w

未だに、コーディングルールのバイブルだろがw

元々は、Andrew Koenig の本

C Traps and Pitfalls, 1988, c1989
Cプログラミングの落とし穴
453デフォルトの名無しさん (ワッチョイ 17d2-rBUL)
垢版 |
2019/07/15(月) 16:20:24.64ID:3cpTbRIL0
自分が馬鹿だとしっている賢い人はMISRAを使うということか
2019/07/15(月) 16:26:07.09ID:IpJNQ16e0
ブランドにすがるだけで自分の頭で考えないやつは相手にならん
あれ読んでて異論を持つことが全くないやつはその疑いが強い
2019/07/15(月) 16:34:38.99ID:ex33LrHm0
>>454
だからどこに異論持ってるのか書けよ
もしかしてグダグダ言うだけ君なの?w
2019/07/15(月) 16:42:13.17ID:IpJNQ16e0
命令すんな
そもそも自分が書かねえくせに
2019/07/15(月) 16:43:21.75ID:Nn+acajv0
>>452
>この研究会は、トヨタなど大企業から、数十人のベテが集まって、
トヨタってコーディングを製造と言い切っちゃう人たちの集まりでしょう?そんな人たちの考え方って信じていいのでしょうかね…
2019/07/15(月) 16:48:48.65ID:ex33LrHm0
>>456
どうせ書けないんだろ、無理すんなよw
2019/07/15(月) 16:49:33.71ID:ex33LrHm0
>>457
信じるのはダメだと思うよ
内容見て判断しなきゃ
2019/07/15(月) 16:51:54.40ID:Voexy70f0
>>452
お前さんはいつも、有名な誰それがこう言った!とか、なんとかの本にこう書かれていた!とか、他人の発言を字面だけなぞって記憶するだけだから、中身の本質も適用すべき場面も長所短所も理解せずに垂れ流して害悪にしかならないから、もういい加減消えてくれないか?
2019/07/15(月) 17:02:08.44ID:14ut6KBx0
多分MISRAはΣ計画とセットだったんじゃねえの
とするとゾンビだよ
2019/07/15(月) 17:25:49.24ID:y88H95dP0
>>457
日本の研究会の考え方・思想は、ほとんどない!
MISRA-C は、Andrew Koenig の本を参考にして、欧州人が作ったから

日本の研究会は、各ルールの例題を作って、誰でもわかるように解説した。
各ルールは、こういう事を言ってます、という解説書

江添 亮の「C++11/14 コア言語」のみたいな本。
無数の例題を並べて、各ルールを解説した本

だから、この2冊は、神の書と言える!
2019/07/15(月) 17:32:05.00ID:dKUxLoi20
ルールとかくそどうでもよくね
動いて読めればそれでいい
2019/07/15(月) 17:32:21.62ID:IpJNQ16e0
>>458
ブーメラン乙
2019/07/15(月) 17:43:32.93ID:ex33LrHm0
>>464
バカなのか?
俺は別に異論があるとは言ってない
異論があるなら書けよって言ってるだけ
俺に何を書けって言ってるんだよw
2019/07/15(月) 17:46:56.60ID:IpJNQ16e0
>>465
またブーメランかよ、ワンパターンなやつだな
俺はさっき相手にならんと言ったはず
2019/07/15(月) 17:47:07.64ID:biXPcN21d
落ちものゲーム作れたと思ったけど落下処理の度に今表示中のものが上にズレて処理後のが新しく表示される仕組みのせいで目が死んだ
これダメな奴だ
2019/07/15(月) 18:01:17.82ID:ex33LrHm0
>>466
ハイハイ、結局具体的には何も言えないグダグダ君だったなw
2019/07/15(月) 18:41:39.94ID:IpJNQ16e0
煽っても情報は得られない
インタビューの下手な人だな
2019/07/15(月) 19:25:33.92ID:ex33LrHm0
情報持ってない奴からなにか得ようとしてるってか?
心配するなよ、お前に期待なんてしてないからw
2019/07/15(月) 20:06:52.59ID:14ut6KBx0
githubに存在するMISRA適合のソースコードとかどんだけあるんだよ
2019/07/15(月) 20:23:31.95ID:y88H95dP0
そのルールを守らないという、逸脱手続きをすれば、OK

トヨタでも、MISRA-C で採点したら、5/100点(ルール)しか取れなかったとかw
70〜80点は、欲しい
2019/07/15(月) 20:27:21.89ID:QcIx6aGf0
>>472
それはそうなんだけど、逸脱したらレビューと品質記録が必須になるので逸脱しない方向へのバイアスが強くなる。
結果、強制されてるのと同じになっちゃう。
2019/07/15(月) 20:28:56.79ID:dKUxLoi20
ちなMISRAってどんなの?
pdfのリンクはってれ
2019/07/15(月) 20:31:45.40ID:y88H95dP0
例えば、Linux では、関数の冒頭部分に、return がよくある。
冒頭部分で、処理しないものをはじいてしまう

でも、MISRA-C では、関数内で、return は、最後に1つしか使えない。
複数箇所に、出口があってはならない

そのルールを守らないなら、逸脱手続きをすればよい。
その代わりに、点数が下がっていく
2019/07/15(月) 20:32:43.56ID:ex33LrHm0
>>471
ほとんどないんじゃね
>>451が言う通りバカ避けだから
>> 関数は、その最後に1つだけの出口を持たなけらばならない
みたいに適合させようとすると人によってはちょっと書き辛いルールもあったりするし
2019/07/15(月) 20:33:46.38ID:ex33LrHm0
あっ、被ったわ
みんな結構このルールに抵抗あるんだなw
2019/07/15(月) 20:35:21.08ID:y88H95dP0
>>474
「misra-c 2004」「misra-c 2012」で検索して!
2019/07/15(月) 20:37:59.21ID:y88H95dP0
他にも、MISRA-C では、2重ループ内から、一気に脱出できないから、フラグを持ちまわる事になる

このルールも嫌われる
2019/07/15(月) 20:48:48.44ID:y88H95dP0
組み込みとか医療用では、バグると簡単に人が死ぬから、
MISRA-C を勉強していない香具師が、コーディングするとヤバイ!

だから、コーディングできる資格を作るべきだっていう話も聞く
2019/07/15(月) 20:50:33.69ID:dKUxLoi20
なんでルールブックが有料やねんあほか勝手にやってろ
2019/07/15(月) 21:07:10.69ID:IpJNQ16e0
>>476
語るに落ちたな
ブランドvsブランドの対戦成績を
自分の頭で考えないブランド志向なやつに出せるわけがない
2019/07/15(月) 21:19:39.89ID:pdudwpaZ0
>>481
検索したら出てきた
http://www.c-lang.org/detail/misra_c.html
2019/07/15(月) 21:36:18.18ID:r7SsHRFS0
4.12 必要 動的なメモリ割り当てを使用してはならない

って酷くね
2019/07/15(月) 21:47:13.82ID:Xch0qlQL0
俺以外は絶対守れよって思うルールも多々ある
2019/07/15(月) 21:57:44.30ID:ex33LrHm0
>>482
何を言ってるのか自分でもわかってないだろww
ブランドとかバカじゃね
2019/07/15(月) 21:58:24.78ID:QcIx6aGf0
関数の中盤以降からreturnするならともかく、早期returnまでも認めないのはナンセンスだよな。
杓子定規すぎるわ。
2019/07/15(月) 22:00:39.84ID:ex33LrHm0
>>484
組込みだと実行時間が読めなくなるのとフラグメンテーションで総容量足りててもエラーになることがあるからしょうがない
2019/07/15(月) 22:06:28.61ID:IpJNQ16e0
>>486
おまえがすがっているのはブランド以外の何物でもない
とぼけたら誤魔化せると思っているならおめでたいやつだ
2019/07/15(月) 22:43:50.22ID:ex33LrHm0
MISRAをブランドとか言うアホがいるんだ…
まあ具体的な内容には突っ込めないグダグダ君だしなぁww
2019/07/15(月) 22:45:14.79ID:ex33LrHm0
そもそもうちはMISRAは参考にしてるけど全面適用なんてしてないし
2019/07/16(火) 00:24:39.33ID:UHx9kM+ca
>>491
いや、しろよ
493デフォルトの名無しさん (アウアウクー MM7b-WqwA)
垢版 |
2019/07/16(火) 00:48:27.21ID:/MIJx2vXM
プログラムは書く人によって千差万別
書く物によっては複雑な物を書かなきゃならない
そしてその上でのバグ千差万別
ルールブックなんてプログラム書かない管理者がこれを守れば大丈夫(キリッ
ってするものだろう
2019/07/16(火) 01:07:51.42ID:EySzsoWc0
普通は大勢で開発するときに必要な取り決めだけどな
そういう規模で仕事しないなら,何しても良いけど
2019/07/16(火) 01:37:13.82ID:UHx9kM+ca
>>494
MISRAは明らかに小規模なプログラムのための規約だと思うよ
2019/07/16(火) 02:37:59.80ID:EySzsoWc0
大規模なプロジェクトのコーディング規約を決める人がここにいるとは思わないからね
小規模だと思うなら,そのルールでやれば良いんじゃない?
497デフォルトの名無しさん (アウアウクー MM7b-WqwA)
垢版 |
2019/07/16(火) 03:09:26.20ID:FvAVzBqbM
大規模とか小規模とかじゃなく実際にプログラムを書いてると必要になったりとかあるって話で
プログラムを書いた事内物が大規模ではとかいってるのか
2019/07/16(火) 03:18:03.55ID:UHx9kM+ca
そうそう、MISRAはクソ
2019/07/16(火) 03:29:07.35ID:UHx9kM+ca
MISRAを尊重するひとって、returnを書く位置によって返る先が変わると思ってるんだよ
2019/07/16(火) 07:29:02.49ID:UAKGOqEv0
間違ったことばかり書いてあるわけじゃないけどね
現場にそぐわないスキル不足なやつを庇うところには同意しかねるわけよ

> ルール 8.14 必要 restrict型修飾子を使用してはならない

規格票が読めないようなアホの相手はやってらんね
C++が混ざるところでも対策は簡単だし
501デフォルトの名無しさん (ワッチョイ 17d2-rBUL)
垢版 |
2019/07/16(火) 07:43:27.01ID:1j77iOOZ0
トヨタのやってることは一つのミスでも人が死ぬということだよ
もしrestrictを使って人が死んだら責任とれるの?
2019/07/16(火) 07:45:28.75ID:/V8NdDl/M
それなら、人が死なないプロジェクトではMISRAは守る必要がないですね。
2019/07/16(火) 07:58:46.16ID:UAKGOqEv0
>>501
規格票を確認しないやつにミスがどうたら言われたかねえぜ
2019/07/16(火) 08:02:25.27ID:UAKGOqEv0
○○を使って人が死んだら責任とれるの?

○○に何でも突っ込めるウルトラクソ論法
ポインタ、共用体、仮定義、数学関数、それから?
2019/07/16(火) 08:50:54.07ID:7HVrvnq4a
>>501
お前が作ってるプログラムはテストしないのか?
2019/07/16(火) 09:07:55.77ID:csbTSCSc0
>>492
絶対守るべき指標と守った方がいい指標、といった具合に何段階かにわかれていて
別途ルールがあるならば守らなくても良い(無理して守るべきでない)指標もあるよ
2019/07/16(火) 09:35:00.37ID:UXD1By8p0
上司のバカかバカの上司でも理解できるまでに破壊されたC言語だろ
それを規格と言ってるだけだ

安全かもしれないけど対照実験がないでしょ
安全であることをどうやって確かめたのか論文の欠片も見つからなかった
だからMISRAの安全神話は神話かデマかフェイクニュースだよ
2019/07/16(火) 09:46:10.29ID:MyJUZjZxa
プライドだけは高いこの道30年の社畜が書いた様なルールだよ。
「してはいけない」ばかりでこうしろという記述が圧倒的に少ない。
フレームワークという発想がない。指摘だけ。すべて勘と経験という名の錯覚に基づいてる。

あと内容的に「最適化はしてはいけない」とか書いておけばいいんじゃないかと思う。次は入れて欲しい。
2019/07/16(火) 10:35:01.62ID:Yi/rfLM50
>>463
処理系依存や未定義だけどなんか上手く動いてる
というのは、ちょっと怖い
2019/07/16(火) 12:58:57.36ID:EySzsoWc0
たまたま動いているのは
処理系のバグかも知れない
2019/07/16(火) 13:18:30.94ID:uQ5be57j0
組込み系の開発経験者いなくて草
MISRA準拠が納品物の条件にあるんだよ
でもプロジェクト毎にカスママイズするから
100%適用するわけじゃないよ
わけわからんルールは適用除外してる
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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