問題タブ [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.
misra - MISRA 2004: 10.1/R 警告
ここでpos.x
は int 型です。
c++ - C/C++ 条件付き return ステートメント
私は組み込みプログラムに取り組んでおり、条件が意図されていない場合は、できるだけ早く機能から戻りたいと考えています。次のコードがあり、組み込みプログラミングを行っているとします。
私の質問は、複数の return ステートメントを持つのは悪いことですか? それは悪い習慣ですか?より良い方法はありますか?MISRAはそれについて何か言いますか?
注: この質問は組み込みシステムに固有のものであり、C/C++ だけでなく MISRA に関係しています。
ありがとう...
c++ - MISRA C++ 2008 Advisory Rule 5-2-10 に違反せずに std::transform を使用するには?
PC-Lint (au-misra-cpp.lnt) で次のエラーが発生します。
ConverterUtil.cpp(90): エラー 864: (情報 -- 変数 'transformValue' を含む式は、評価の順序に依存する可能性があります [ MISRA C++ ルール 5-2-10 ])
ConverterUtil.cpp(90): エラー 864: (情報 -- 変数 'transformValue' を含む式は、評価の順序に依存する可能性があります [ MISRA C++ ルール 5-2-10 ])
ConverterUtil.cpp(90): エラー 534: (警告 -- 関数 'std::transform(std::_String_iterator>>、std::_String_iterator>>、std::_String_iterator>>、int (*) の戻り値を無視しています(int))' (998 行目、ファイル C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\algorithm と比較) [MISRA C++ Rules 0-1-7 and 8-4-6], [ MISRA C++ ルール 0-3-2])
このコードで:
変換で同じ std::string を入力と出力として使用するという事実が気に入らなかったと思いますが、出力として別の文字列を使用すると同じエラーが発生します。
std::transform を MISRA に準拠させることは可能ですか?
c - Misra ルール 19.7 : マクロのような関数
Misra ルール 19.7 に関する警告があります。以下の行では、関数のようなマクロよりも関数を使用する必要があります。
これをどのように解決すればよいですか?
c++ - 仮想関数をオーバーライドする純粋仮想関数
次のコードが与えられたとします。
クラスは、仮想メソッドを純粋なB
仮想メソッドでオーバーライドします。これを行う目的は、ケース class で変更することを許可されていない既存のクラスの拡張である可能性がありますが、さらにいくつかのクラスの基本クラスでなければならない抽象クラスをまだ持っています。someMethod
A
B
MISRA-C++ ルール 10-3-3によると: コード アナライザーは次の警告を出します:純粋仮想関数は非純粋仮想関数をオーバーライドします。
しかし、警告に関する詳細はあまり見つかりません。上記のコードの副作用は何ですか? ここで悪い習慣は何ですか?
更新: 標準は MISRA-C++ (C++98) です
c - バイト配列へのポインタ
Misra C の要件のために、同僚の 1 人が使用したいポインター宣言で問題が発生しています。Misra (Safety Critical ガイドライン) では、単なるプログラマーがポインターを使用することはできませんが、配列バイトを操作できるようになります。彼は、バイト配列へのポインターを取得するつもりです (そのため、実際の配列をスタックに渡しません)。
呼び出し関数は次のようになります。
しかし、Foo() で pu8Buffer にアクセスすると、配列が間違っています。明らかに、期待しているものを渡していません。配列は呼び出し関数では正しいが、Foo() 内では正しくない
彼は、バイト配列へのポインターではなく、バイトへのポインターの配列を作成したと思います。
明確にしたい人はいますか?Foo(&u8Payload, u16PayloadLen); どちらも機能しません。
c - 識別子の最初の 31 文字を一意にする必要があるのはなぜですか?
MISRA 2004ルール 5.1 では、すべての識別子は最初の 31 文字が一意でなければならないと規定されています。このルールの理由は何ですか?一部のコンパイラの技術的な制限ですか?