問題タブ [misra]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - MISRA C 2012はboolを使用しないと言っていますか
私は、新しいプロジェクトのフレームを作成する初期段階にいます。
戻り値の型が「bool」の関数を定義しました
PC-Lint からこの出力を取得しました
私は先に進み、これを別のヘッダーで定義して、lint をシャットダウンしました。
それから、なぜそれをしなければならなかったのか、なぜそれが何かを変えたのか疑問に思い始めました. MISRA 2012 Dir 4.6 に変更しました。主に、short、int、long などのプリミティブ型の幅、それらの幅、およびそれらがどのように署名されているかに関心があります。
標準では、bool の増幅、合理的、例外、または例は示されていません。
bool は、C99 の stdbool.h で _Bool として明示的に定義されています。では、この基準は本当に bool に当てはまるのでしょうか?
C99のセクション6.2.5によると、_Boolは常に明示的に「値0と1を格納するのに十分な大きさの最小の標準符号なし整数型」であると思いました。したがって、bool が署名されていないことがわかります。_Bool が固定幅ではなく、サブジェクトが何らかの形で昇格されているという事実の問題ですか? 理性はその概念と矛盾するように見えるからです。
int 型のサイズによって、式が整数昇格の対象となるかどうかが決まる可能性があるため、このガイドラインを順守しても移植性は保証されません。
置くだけでtypedef bool bool_t;
何かが変わるのはなぜですか?bool_t の幅もプラットフォームに依存します。bool を再定義するより良い方法はありますか?
実装された型が実際にその長さでない限り、型を特定の長さで定義してはなりません
したがってtypedef bool bool8_t;
、完全に違法であるべきです。
Gimpel の指令 4.6 の解釈は間違っているのでしょうか、それとも的を射ていますか?
misra - MISRA 警告の修正方法: MISRA 18.4 (C90-2012 adv.)
正式な引数でパラメーターのアドレスをキャッチする 1 つの API を使用しました。しかし、ログを使用し、そのアドレスを印刷目的で使用したことがあり、以下のような MISRA 警告が表示されました。
MISRA.PTR.ARITH ポインタが算術または配列インデックス式で使用されています
この警告を修正するにはどうすればよいですか?
コード スニペット (コメントから):
c - 構造体配列の初期化での MISRA-C エラー
私は次のものを持っています:
私には問題ないように思えますが、MISRA-C は次のエラーを出しています:
MISRA C:2012 ルール 10.3 違反: [R] 式の値は、より狭いエッセンシャル タイプまたは異なるエッセンシャル タイプ カテゴリのオブジェクトに割り当てられません。
なぜこれが起こっているのかを理解しようとしましたが、それを見ることができます。また、ビルド結果は同様の状況でこのエラーに悩まされており、その理由はわかりません。
何が起こっているのか知っている人はいますか?
編集:私はまた、すべての値を明示的にキャストしようとしましたが、それでも同じエラーが発生します:
c - (符号付き) 列挙値を使用したビット演算
フラグに列挙子の値を使用しています:
MISRA-C:2004 によると、ビット単位の操作は符号付きの型では実行できません。残念ながら、私のコンパイラ IAR は、基になる列挙型としてsigned int (または short または char) を使用します。私が見つけることができる唯一のオプションは、signedness ("--enum-is-int") ではなく、サイズに関連しています。