C言語なら俺に聞け 153

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 5fba-LL4R)
垢版 |
2019/08/17(土) 23:02:42.00ID:tN5mSQYg0
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言語なら俺に聞け 152
https://mevius.5ch.net/test/read.cgi/tech/1560763630/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2019/12/25(水) 08:32:20.25ID:oGSLd7g6a
それもこれもマジックナンバーにコメント書かなかったおまいらが悪いんやで
2019/12/25(水) 08:34:25.12ID:mNtkopg10
マジックナンバーの何がいけない、どういう場合にどんな問題があるかを理解しないまま、杓子定規にルールだけ覚えるとそんな奴が出来上がるな。
2019/12/25(水) 08:51:06.27ID:gNbuW8hwM
>>721
> プロジェクトリーダー「数字直接記入禁止!全部#define で置き換えろ!」

良いと思うよ!!
2019/12/25(水) 09:53:45.40ID:WMMCG2Dq0
値まで書いたアホっぽい定数 はわりと使うかな・・・

#define EGGCOUNT30 30
みたいに書いちゃうやつ

コード中に即値書きたいけど書くとリファクタリングで死ぬから
リファクタリングのためだけに定数書いてる感じ
727デフォルトの名無しさん (アウウィフ FF5b-hPjh)
垢版 |
2019/12/25(水) 10:17:23.56ID:2ymVLaRcF
当たり前だがリファクタリング以前に定数調整だけで死ぬぞ
#define EGGCOUNT 30
なら
#define EGGCOUNT 40
で済むのに

#define EGGCOUNT30 30
だと
#define EGGCOUNT40 40
で全置換する気か
2019/12/25(水) 10:24:47.96ID:gNbuW8hwM
s/30/40/g
は基地外沙汰だが
s/EGGCOUNT30/EGGCOUNT40/g
ならイケそうかも!!
2019/12/25(水) 13:00:30.03ID:KFffpDzg0
フォーマット文字列中のも駄目なんかな
少数以下 3桁に整えるのに "%.3f" → "%.*f" にして引数で渡す
2019/12/25(水) 13:08:29.51ID:KFffpDzg0
ああ フォーマット文字列を define しろということか
#define FORMAT "%.3f"
 :
sprintf(buf, FROMAT, double_value);
みたいな
2019/12/25(水) 13:12:39.59ID:wMqEADXhd
>>727
数値一通りdefineして
NUM_56
みたいに数値のかわりに使う

糞コーディング規約の典型

そういう環境だと
大抵defineの数値を変えるだけじゃまともに動かない
2019/12/25(水) 13:18:43.41ID:wMqEADXhd
>>730
文字列リテラルをコード中に記述禁止
その為itoaみたいなのを組み合わせたコードが出来る
2019/12/25(水) 13:45:41.90ID:WMMCG2Dq0
>>727
そのとおり、全置換をする前提なんよ

置換するのはIDEのお仕事だから漏れは無いと信頼してるし、なにより
ソース改変による影響範囲の割り出しとテストしなおしの強制を兼ねてる
2019/12/25(水) 13:50:36.68ID:V0IDAf7x0
エディタの正規表現は使わないのか?
複数パターンでも一回で出来ると思うが
2019/12/25(水) 14:28:39.98ID:ZI663GBY0
>>720
MISRA-C の違反!

if(条件式) には、実質的なbool 値のみを書く!

ただし、if( x ) で、x がbool変数なら、OK
2019/12/25(水) 14:58:33.15ID:HhfzRslS0
x != 0 も bool ではないんだが
2019/12/25(水) 15:17:44.07ID:ZI663GBY0
x != 0
は、yes/no の2値しかないでしょ?

実質的には、bool 値として使っている
2019/12/25(水) 15:25:44.58ID:HhfzRslS0
それはおまえの思い込み

ISO/IEC 9899:2011
6.5.9 Equality operators
3
Each of the operators yields 1 if the specified relation is true and 0 if it is false.
The result has type int.

これが事実だ
739デフォルトの名無しさん (ワッチョイ bf8c-vyMa)
垢版 |
2019/12/25(水) 16:13:24.55ID:xjd+p9Q20
直接コードを書くことを禁止する。スクリプトを使って書け。
2019/12/25(水) 16:42:27.57ID:wMqEADXhd
BOOL
YESNO
OKCANCEL
ONEBIT

実質的にboolなら中身はdoubleでもenumでもint64_tでもifに入れて良い
っていうコーディング規約
2019/12/25(水) 16:42:38.50ID:ZI663GBY0
文法は関係ない。
あくまでも、コードの品質・可読性を上げるための、MISRA-C のルール!

if, while などの条件式には、実質的なbool 値しか書けない

条件式に、単なる整数などを書けない。
整数の0 を偽とみなした、条件判断を書けない

MISRA-Cを守っていないと、低品質で、審査に通りませんよと言うことw
2019/12/25(水) 17:03:05.94ID:TfD43SqCa
>>741
よそのスレでRuby基地外っぷりを発揮してさんざん迷惑を掛けているお前がルール遵守を説くなんて、羞恥心はないのか?
2019/12/25(水) 17:09:20.32ID:KFffpDzg0
if (x) → if (!!x) かにゃ?
744デフォルトの名無しさん (アウウィフ FF5b-hPjh)
垢版 |
2019/12/25(水) 18:22:33.85ID:2ymVLaRcF
>>735
if(!!x)
2019/12/25(水) 19:13:54.17ID:LrSoTBV60
まともなルールと仮定した場合

>>735 がダメなら
>>743 >>744 もダメだろうな
2019/12/25(水) 19:56:23.47ID:Fvp/Fpps0
>>741
また MISRA ですか…
MISRA 適合かどうかを診断してくれるプログラムでも配布してくれているんだと思っていましたが、そうではなく、ただ人を縛る規則を決めるのが好きな人間の集団なんですね…
2019/12/25(水) 21:01:12.18ID:HhfzRslS0
> MISRA-Cを守っていないと、低品質で、審査に通りませんよと言うことw

MISRA-Cを守っていれば、高品質で、審査に通ると言いたいのか?
もう罵倒語が喉まで出かかっているんだが
2019/12/25(水) 22:01:38.68ID:R5R0tFog0
違うナァ
MISRA語ルールを守っているとMISRA語のコンパイラが書けないんだよw
大いなる自己矛盾に陥ってMISRAは沈没する
2019/12/25(水) 22:15:36.92ID:rtgRmFxx0
>>726みたいなのはいくつか特定の値しかとれない引数のために使われることはあるね。
まぁenumでもいいんだけど。
2019/12/25(水) 22:31:21.33ID:W4j7C6dU0
>>747
>> MISRA-Cを守っていないと、低品質で、審査に通りませんよと言うことw
これを読んで
> MISRA-Cを守っていれば、高品質で、審査に通ると言いたいのか?
と解釈する奴はもれなくバカ
2019/12/25(水) 22:35:19.52ID:HhfzRslS0
>>750
違うんなら弁明しろよ
それができないだろうという予想で、罵倒語が喉まで出かかっている
2019/12/25(水) 22:55:02.25ID:W4j7C6dU0
>>751
マジでバカなのか?w
AならBである
から
AでないならBでない
(当たり前だが真ではない)
って書けばお前のアホさが理解できるかな?
これでわからないなら中学の数学からやり直せ
2019/12/25(水) 23:19:28.12ID:7G8eDwRY0
0(ゼロ)はマジックナンバーじゃないような気が
2019/12/25(水) 23:20:28.23ID:LrSoTBV60
8進数は使用禁止なので0は使えません
2019/12/26(木) 00:09:17.82ID:AoPKrYsL0
0x0と書けばいい
2019/12/26(木) 01:10:46.52ID:SdIj1xpo0
main関数の{ }についてお聞きしたいんですが、
int main(void) {
____/* コード */
}
という表記ではいけないですか?
スッキリCや各種サイトを見ると、
int main(void)
{
____/* コード */
}
となっていることがほとんどなのですが
2019/12/26(木) 01:13:45.64ID:1Soz4RTf0
間を取って
int main(void) { /* コード */ }
でも動くぞ
2019/12/26(木) 01:16:16.88ID:wuBFmrIL0
>>756
コンパイラは改行を無視するんやで
2019/12/26(木) 01:20:09.70ID:SdIj1xpo0
ありがとうございます。
後者にしないといけないという決まりとかあるんですか?
2019/12/26(木) 01:22:32.15ID:B3/URd3+M
文法じゃなくてコーディングスタイルのこと聞いてるんでしょ。
チーム内で決まったスタイルがあるならそれに従えばいいし、
そうでなければ自分の好みで決めればいい。
俺の好みは1行減るし統一感のある前者。
2019/12/26(木) 01:23:11.55ID:rIhsLdYp0
私も前者
2019/12/26(木) 01:28:27.58ID:ekrCE4yL0
K&R2は後者
2019/12/26(木) 01:40:40.30ID:SdIj1xpo0
もう少し考えてみようと思います
深夜にありがとうございました
2019/12/26(木) 07:31:20.36ID:RfJEL4eB0
>>752
では、741は何を主張したかったんだ?

> MISRA-Cを守っていないと、低品質で、審査に通りませんよと言うことw

わざわざ、こんな戯れ言をぬかした意図を説明しろ
2019/12/26(木) 07:33:50.37ID:Fsuom43iM
>>764
それは741に聞けや
俺はお前のバカさを指摘しただけ
2019/12/26(木) 07:36:01.30ID:RfJEL4eB0
>>756
if (...) {
while (...) {
do {
なのに、
main()
{
という矛盾はよく見かけるが
そうなっている案件で秩序を乱すことはしない
2019/12/26(木) 07:49:13.97ID:RfJEL4eB0
>>765
741本人のくせに自分の言葉から逃げてんなよ
まあ、あれじゃ逃げたくなるのはわかるがw
2019/12/26(木) 08:06:43.81ID:GqOej4nw0
>>756
int func(int arg)
{
...
}
という具合に「関数本体を開始する波括弧を次の行に書く」方式だと
ヘッダファイルにプロトタイプ宣言として書き写す際に
1行コピーして行末に ; 追加で完了、楽チンという利点があるわね。

main() の場合は当てはまらないのがやや弱いけど。
2019/12/26(木) 08:18:02.10ID:Fsuom43iM
>>767
自分のバカさを認められずに自演認定でごまかすのに必死かよw
哀れな奴
2019/12/26(木) 08:31:13.53ID:RfJEL4eB0
>>769
MISRAの話しなくなってやんのw
技術板で技術的な話ができないやつはゴミ以下だぜ
2019/12/26(木) 08:47:26.74ID:Fsuom43iM
>>770
> 技術板で技術的な話ができないやつはゴミ以下だぜ
中学校の数学すら理解してない奴が何言ってるんだかw
2019/12/26(木) 10:44:30.71ID:RfJEL4eB0
>>771
いや理解してるよ
そうでなきゃ年収8桁はできねえ
2019/12/26(木) 11:06:55.96ID:F8ujXl8x0
こんなところで年収自慢なんかしても虚しいだけじゃないか?
対偶を勘違いしてるなんてみんな気付いてるのに無理につっかかんなって
2019/12/26(木) 11:13:36.42ID:ekrCE4yL0
>>766
power(x, n)
int x, n;
{
....
}
2019/12/26(木) 11:15:24.50ID:ekrCE4yL0
MISRAで if(x)がまずい理由を教えてくだされ
776デフォルトの名無しさん (ワイーワ2 FF7a-v1fK)
垢版 |
2019/12/26(木) 11:17:42.33ID:qmNoWNu8F
>>731
一般的に特定の非正規形は特定の分析用途には使いやすくても
違う観点で分析しようとすると正規形からデータ変形するよりも多くの手間がかかる
参照オンリーの場合でもデータの利用方法が定型化していない場合は正規形から考えるメリットは大きい

特にRDBで分析用途のDBを用意する場合は参照オンリーでも正規形から考えとかないと手間が異常に増える
777デフォルトの名無しさん (ワイーワ2 FF7a-v1fK)
垢版 |
2019/12/26(木) 11:21:50.00ID:qmNoWNu8F
>>752
高品質で、審査に通っていれば、MISRA-Cを守っている

やっぱり違うなω
元の命題からして可笑しいωωω
2019/12/26(木) 11:31:06.38ID:F8ujXl8x0
元の命題の真偽ではなく元の命題を真と仮定した場合、対偶は真か?という話
本来、対偶は真であるが747は対偶ではない命題を挙げてそれが真であるかのようにレスしているので突っ込まれた
対偶の挙げ方の間違いを指摘したのになぜか元の命題の真偽についてギャーギャー言うから話が噛み合わない
2019/12/26(木) 11:36:01.57ID:RfJEL4eB0
>>773
みんな気付いているのは、わざと言っていることだよ
鬼の首でも取ったように得意がってるのがおまえだけ
中学の数学がやっとわかるのか、すごいなあw
2019/12/26(木) 12:24:56.24ID:Fsuom43iM
いきなり年収自慢とか笑える
まあ低能にありがちな行動だけどなw
2019/12/26(木) 12:27:00.84ID:RfJEL4eB0
中卒でも中には総理大臣になった人もいるけどね
そういうことにしといてやろうか?
2019/12/26(木) 12:48:48.88ID:nqqh6plV0
そもそも集合関係と因果関係を混同しているのが間違いの原因
「事象Aが真ならば事象Bは真」の対偶「事象Bが真でないならば事象Aは真ではない」は常に正しい
一方「原因Aが真ならば結果Bは真」に対して「結果Bが真でないならば原因Aは真ではない」は正しいとは限らない
2019/12/26(木) 13:05:49.36ID:mq/d+l+IH
>>774
K&R1の時代には改行後に { を書くしかないが、
いまどき持ち出して混乱させるのはやめろ
2019/12/26(木) 13:06:48.52ID:RfJEL4eB0
>>782
おまえ747の時点で俺がそう言っているのが読めてないもんな
そうやって教科書を朗読するのもいいことだから頑張んなw

お勉強はまず憶えることが初手だが
現実問題に応用できるようになって始めて完成するんだよ
2019/12/26(木) 13:08:29.47ID:RfJEL4eB0
>>783
774は制御文と関数は違うということが766の言う「矛盾」のルーツだと言いたいんだと思うぜ
2019/12/26(木) 16:43:01.33ID:nqqh6plV0
>>747は「事象Aが真でないならば事象Bは真ではない」
集合論で言えば「対偶」ではなくて「裏」の関係
2019/12/26(木) 16:53:45.31ID:nqqh6plV0
「裏」の「逆」または「逆」の「裏」が「対偶」
ある命題とその待遇が等しいのはそれぞれの事象に因果関係が存在しない場合に限る
2019/12/26(木) 16:55:11.16ID:nqqh6plV0
訂正
対偶 ← 待遇
789デフォルトの名無しさん (ワッチョイ 2135-5PNG)
垢版 |
2019/12/26(木) 16:58:23.55ID:sEyHy/3c0
ダッサ。
2019/12/26(木) 17:06:16.94ID:RfJEL4eB0
やっぱり、憶えたてなんだな
2019/12/26(木) 17:08:28.53ID:nqqh6plV0
間違った応用が>>747
2019/12/26(木) 17:49:48.63ID:WYIkcR78d
MISRAの肩を持とうとしてしくじったトンマなやつに
どんな気持ちか聞いてみたのさ
2019/12/26(木) 17:53:02.71ID:WYIkcR78d
741本人以外がこんなに激怒するわけねえしな
なあトンマ、今どんな気持ち?
2019/12/26(木) 19:16:56.42ID:Fsuom43iM
対偶と裏の区別もつかずに年収8桁とか学歴とか低能にありがちなレス連発やんw
こんなわかりやすい奴久々に見たわ
2019/12/26(木) 19:33:59.80ID:AoPKrYsL0
この場合は対偶ではなく必要条件だろう
2019/12/26(木) 20:35:37.78ID:oR6l+tOb0
>>794
あなたのほうが滑っていますよ…
そもそも MISRA 推しな時点でこのスレの住人から疑問の声が挙がっているのに、まだそれに気づかないの?

末期ですね
2019/12/26(木) 22:41:57.32ID:VSQSaAA/0
いくらMISRA推しガーとか言っても>>747がバカなのは変わらないんだがw
2019/12/26(木) 22:55:46.00ID:T0QuicHn0
トヨタの車が暴走した問題で、米国議会でも言ってただろ

トヨタは、MISRA-C で、10点ぐらいしか取れてないってw
100ルール中、90に違反してる

守ってない企業があるから、人命を預かる、ロケット・医療系組み込みなどでは、
特に厳しい資格が必要だと議論になってる

組み込みでは、バグで簡単に、人が死ぬから

だから、何十年も研究してる、Elixir みたいな関数型を使う
799デフォルトの名無しさん (アウアウクー MMd2-Ap2Z)
垢版 |
2019/12/26(木) 23:26:05.24ID:46flAZOsM
プログラムを書くのに●●は駄目だとか使いにくくなるほど制限かけてもさぁ
書きたい事に必要な関数とか書き方とか知らないようなのに投げてるだけなので脆弱性になるようなバグは出てくるし意味がない
むしろ知ってるような人にとっては制限になって害でしかない
2019/12/26(木) 23:35:54.81ID:T0QuicHn0
JavaScript で言えば、TypeScript, ESLint とか

違反を警告してくれる、lint ツール
2019/12/27(金) 04:25:18.37ID:z/PqntEl0
>>740
> 実質的にboolなら中身はdoubleでもenumでもint64_tでもifに入れて良い
っていうコーディング規約
-0.0は ?
2019/12/27(金) 08:36:35.25ID:DgDeU8pJ0
>>799
御意

無能のために無能に合わせろと無能がわめく
自己虫以外の何ものでもない
2019/12/27(金) 10:25:45.84ID:LEFEPZUo0
MISRAってむしろ>>799, >>802みたいな自称上級者がやらかすのを防止するためのものなんだけどなw
2019/12/27(金) 11:19:30.64ID:atLAFlUCa
もうめんどくさいからMISRA押しのRuby君が害悪ということでいいのではなかろうか?
2019/12/27(金) 11:33:33.48ID:4UHOi1400
>>798
トヨタなんて下請け丸投げでソース読めなくてレビューもしてくれなくてテスト仕様書も丸投げで無駄なエビデンスばかり要求してる
10点ぐらいしか取れてないのは下請けなんだけどそれを指摘もできない
2019/12/27(金) 12:23:31.65ID:DgDeU8pJ0
>>803
上級者なんて称号は俺はもちろん客先の誰も使ってねえぜ
仕事がもらえる、それだけだ

わかるかい? 無職君w
2019/12/27(金) 12:25:05.61ID:DgDeU8pJ0
ちょっと年収の話したらあんなに発狂すると思わなかった
よっぽどコンプレックスらしいな、おーこわ
808デフォルトの名無しさん (ワッチョイ 328c-M7II)
垢版 |
2019/12/27(金) 13:04:42.76ID:8p+LGuzl0
作業は指示するが仕事は教えないクソ野郎が増えたから
この先の見通しが暗い。
2019/12/27(金) 13:14:05.49ID:LEFEPZUo0
「自称」上級者の意味すら理解できない>>806
だめなのは数学だけかと思ったら国語も壊滅的だなw
2019/12/27(金) 14:16:27.64ID:DgDeU8pJ0
見てやってよ、このファビョり方w
2019/12/27(金) 18:59:31.88ID:9iE1xeZJ0
>>800
そういうものを MISRA 対応として lint ツールとして無償公開するのが筋というものでしょうね
2019/12/27(金) 19:05:46.68ID:9mTyz2ro0
例外項目を設けてスコアで評価するにしても、事前に自動評価できるツールがあるといいですわね
2019/12/27(金) 19:07:00.34ID:EEOcwadQ0
すぐに愚痴こぼしスレになってしまう
2019/12/27(金) 19:30:32.05ID:DgDeU8pJ0
スコアとか意味ねえ
違反箇所は違反箇所で数の問題じゃねえ
違反プログラムは遠さねえとぬかすなら絶対に通すな
その結果に責任を持て
2019/12/27(金) 20:14:59.62ID:LEFEPZUo0
対偶すら理解できてない奴が責任を持てとかw
2019/12/27(金) 20:32:09.24ID:BhrMVyLj0
MISRA対応テストツール高そう
2019/12/27(金) 20:33:12.08ID:BhrMVyLj0
>>803が仕事を出している側である可能性を考慮できない>>806
2019/12/27(金) 20:59:59.10ID:9iE1xeZJ0
>>815
そこにしか突っ込むことが出来ないのですか?みじめですね…
2019/12/27(金) 21:01:30.94ID:G2Hqp8Jj0
組込み開発者におくるMISRA‐C:2004―C言語利用の高信頼化ガイド、MISRA‐C研究会、2006

この研究会は、トヨタなど大企業から、数十人のベテが集まって、
欧州人に聞きながら、作った本。
未だに、コーディングルールのバイブルだろ

元々は、Andrew Koenig の本

C Traps and Pitfalls, 1988, c1989
Cプログラミングの落とし穴

この本から、Lint が始まったのじゃないか?
2019/12/27(金) 21:11:55.30ID:LEFEPZUo0
>>818
別に他のところに興味ないし
まあこんな初歩的なところに突っ込まれるとそりゃ困るわなw
だからROMってりゃいいと思うんだけどな
2019/12/27(金) 21:13:58.37ID:LEFEPZUo0
>>819
> この本から、Lint が始まったのじゃないか?
流石にもう少し時代を見てからレスした方がいいぞ…
2019/12/27(金) 21:29:02.92ID:BhrMVyLj0
そっかー組み込み屋さんはUNIXの歴史とか知らなかったりするのか
2019/12/27(金) 21:33:22.44ID:9iE1xeZJ0
>>819
>この本から、Lint が始まったのじゃないか?

違います
初期の lint はベル研の V7 と同時、1979 にはリリースされています
K&R1 は特に引数まわりはスキのある仕様でしたので細かくチェックをいれる lint は必要であったのも理解できます、これは K&R2 になってかなり改善されました
それに最近のコンパイラは lint に似た warning も出せるようになったし
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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