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(月) 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%適用するわけじゃないよ
わけわからんルールは適用除外してる
2019/07/16(火) 14:13:08.82ID:i1fbuZ/pM
>>511
> 組込み系の開発経験者いなくて草
ID:y88H95dP0 あたりは経験者だろ
2019/07/16(火) 15:01:33.68ID:csbTSCSc0
>>511
8進数使うな、とかいやだよね
2019/07/16(火) 15:05:03.91ID:Yi/rfLM50
エディタ上での見栄えで桁合わせに 空白を使わず 0 で補ってやらかす
2019/07/16(火) 15:14:31.06ID:EySzsoWc0
>>513
2進数や16進数は見慣れているんだが
8進数ってどういう時に使いたい?
2019/07/16(火) 15:27:11.60ID:UHx9kM+ca
バイトが6bitの時は便利だったとかいう話だけど、今要らんよね
emacs使っててエンコードがアレだと出てくるね
2019/07/16(火) 15:32:14.71ID:Yi/rfLM50
文字列で [ESC] を埋めるのに \033 を使ってるのを見るぐらい

(2進数のリテラルをマクロでなんとかするとき 一時的に8進化するけど 中の話)
2019/07/16(火) 15:40:10.80ID:uQ5be57j0
大昔のアーキテクチャは18bit,24bit とかで3bit 区切りが扱いやすかった
今は16,32,64と16進数が扱いやすいって話だね
ゼロ始まりは8進数というのはB言語からきたらしいよ
2019/07/16(火) 15:44:50.30ID:i1fbuZ/pM
>>513
いや、もうコンパイルオプションで禁止してもいいレベル

>>515-516
Unix/Linuxのファイルパーミッションが3ビット単位だからと言うのはあるけど今時直書きなんてしないし

>>517
それも "¥x1b" の方が馴染みがあると思う
2019/07/16(火) 16:30:56.95ID:SpxSpG+wx
\0 … 8進数
\x0 … 16進数
2019/07/16(火) 16:37:07.34ID:cpfSTA9t0
>>487
if の nest が深くなってしまう?
2019/07/16(火) 16:54:01.54ID:Yi/rfLM50
>>521
教条主義的に守るなら そうせざるを得ないだろうね

if (エラー) return ; // 即脱出
後続コード
return ; // 最終

即脱出を禁ずるなら
後続コードは即脱出条件とは排他的なので if (or else) 内に収めるしかない

if (!エラー) {
 後続コード
}
return ; // 最終
2019/07/16(火) 16:58:26.41ID:EySzsoWc0
goto ___exit; /* 震え声 */
2019/07/16(火) 16:59:45.97ID:Yi/rfLM50
多分 goto も塞がれてる気配w
2019/07/16(火) 17:24:48.72ID:uQ5be57j0
うちはreturnは最後に一つのみってやつは適用除外になってる
理由はネストが深くなって読みづらくなるから

gotoもネストしたループから一気に抜ける場合のみ使ってもよいことになってる
フラグ使ってbreakで抜けるより読みやすいからね
2019/07/16(火) 17:27:15.45ID:glyNXuyHa
もちろんgotoも禁止さ。
あと、各関数の頭で引数チェックも必須なのでreturn禁止とのコンボでほぼ必ず正常系処理のネストが一段以上深くなる。
引数チェック必須はISO26262だったかもしれん。
2019/07/16(火) 17:27:59.62ID:UHx9kM+ca
途中のreturn禁止を徹底するなら、ifとかelseの後に2行以上書くの禁止にした方がいいね。
代入だけ許容するくらいでいい。
2019/07/16(火) 17:28:40.15ID:T78CNDqDd
>>513
0は0x0とか書かなきゃいけないんかね
2019/07/16(火) 18:10:37.85ID:QICQY/wp0
>515
そりゃもう512色カラー設定に(ry
2019/07/16(火) 18:31:58.85ID:2nARKc5Ld
ここまできたらC言語も禁止だな。
pythonでコーディングしてコンパイルしてやればいい。
2019/07/16(火) 18:35:56.79ID:/Cc9wbE10
結構前から言われてない?
「C言語を使う必要が無いなら使うな」と
532デフォルトの名無しさん (アウアウウー Sa47-KZVA)
垢版 |
2019/07/16(火) 18:47:43.53ID:K50k857la
pythonを使って人が死んだら責任とれるの?
2019/07/16(火) 18:54:47.98ID:2nARKc5Ld
>>532
大丈夫さ。プログラム全体をtryで囲んで引っ掛かったらprint("手動運転に切り替てください")のコンボがある。
2019/07/16(火) 18:58:26.32ID:uQ5be57j0
pythonでOSやデバドラ書けるようになったら考えるわ
2019/07/16(火) 20:05:19.62ID:WsWptbblx
#define xxx 06
#define yyy 07
//#define zzz 08 // なぜかエラーになる
536デフォルトの名無しさん (アウアウウー Sa47-KZVA)
垢版 |
2019/07/16(火) 20:31:07.37ID:K50k857la
なぜかはひみつ
2019/07/16(火) 20:54:46.50ID:GCGNUpCjM
>>535
なんてありがちな…
2019/07/16(火) 21:03:30.93ID:GCGNUpCjM
ここらへん嫁
https://programming-study.com/technology/lets-learn-how-to-express-constants/#i
539デフォルトの名無しさん (アウアウウー Sa47-KZVA)
垢版 |
2019/07/16(火) 21:05:08.13ID:K50k857la
祈りが足りないからだな
2019/07/16(火) 21:08:14.38ID:uQ5be57j0
ちょっと前に8進数が〜ってやってるのに
あ、ネタかw
2019/07/16(火) 21:22:48.20ID:/Cc9wbE10
このスレの人って少し前のレス読まないよね
2019/07/16(火) 21:31:28.73ID:7JXDuVC90
const char *sの順番が納得いかない
直感的にはchar * const sだろうが!!
2019/07/16(火) 21:32:10.10ID:W8tOKWg20
char const*だろ?
2019/07/16(火) 22:16:46.03ID:Qe+dZ6A/0
* const char s
じゃね?
2019/07/16(火) 22:17:34.37ID:Qe+dZ6A/0
おれは何を言ってるんだ??
2019/07/16(火) 22:20:37.80ID:dxLim7GAx
>>542
>const char *sの順番が納得いかない
>直感的にはchar * const sだろうが!!

前者はポイントされる文字列が const で、後者はポインタ自体が const でしょ
2019/07/16(火) 22:42:49.53ID:uQ5be57j0
const char* const s
これも直感的じゃないって言うんだろうか
2019/07/16(火) 22:43:19.23ID:dxLim7GAx
546です
すみません、それを踏まえてということか…
2019/07/16(火) 22:50:32.56ID:g+WSNcLQ0
const は後置で書いたほうが整合性が取れる
char const * const s:
しかし、見た目的にかわいいのは前置である
const char * s;
私はかわいいのが好きである
よって前置は使わない
2019/07/16(火) 22:58:11.13ID:g+WSNcLQ0
そこで私が提案したいのが「strong」である
strongは修飾したデータをすべてconstにする
つまり
char const * const s;

strong char * s;
は等価である
2019/07/16(火) 23:13:59.86ID:ICazHXPW0
>>550
安易な予約語の追加は嫌われるよ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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