• Imagix 4D ユーザガイド
  • 目次

[ソースチェック] レポート

ソースチェックは、以下にリストされているソースコード品質チェックのそれぞれに対する一連のレポートです。これらのソースチェックは、一般的に合意された設計およびコーディングのプラクティスに対する例外を指摘します。これらのチェックの一部は、特定のMISRA Cルールに対応しており、それらにはMISRA C:2012のルール番号が示されています。

レポートメニューから起動すると、各レポートはプロジェクト内のすべてのファイルにわたる特定のソースチェックに対するすべての例外のリストを提供します。あるいは、特定のファイルに対するすべてのソースチェックの例外を表示することもできます。このファイル固有のソースチェックレポートを起動するには、ファイルシンボルを右クリックしてコンテキストメニューを使用するか、ファイルエディタの [ファイル] > [レポート] メニューを使用します。

また [ファイルエディタ] では、ソースコード内において、例外が発生した特定の領域を表示することも可能です。該当箇所はアンダーラインで強調表示され、全般的な [オプション] ダイアログ([ファイル] > [オプション] > [ファイルエディタ] > [ソースチェックの表示])から、特定のソースチェックを有効あるいは無効にすることができます。特定のソースチェックの例外に対応する、アンダーラインの表示形式は、[情報オーバーレイ] を確認してください。

式の種類

8 進定数8 進定数の使用を示します(ルール7.1)
u 接尾語の欠落符号なし型で表現される整数定数の接尾語 u または U が省略されていることを示します(ルール7.2)
不適切な本質型不適切な本質型を持つオペランドを示します(ルール10.1)
演算処理で使用されるchar型加減算処理で、本質的に文字型を持つ式が不適切に使用されていることを示します(ルール10.2)
より狭い型への代入"式がより狭い本質型または異なる本質型カテゴリに代入されていることを示します(ルール10.3)
本質型の不一致異なる本質型を持つオペランドの算術変換を伴う演算を示します(ルール10.4)
型変換の問題精度を失う可能性のある変換、または移植性のない算術やポインタの解釈に依存する可能性がある変換を示します。これには、移植性の問題につながる可能性がある、符号付きオペランドと符号なしオペランドの混在が含まれます。 また、符号付きオペランドの右シフトも含まれる。(例: int x; unsigned y; x = y;)
より広い型への複合代入より広い本質型に代入されている複合式を示します(ルール10.6)
より広い型を伴う複合算術演算複合オペランドがもう一方のオペランドよりも狭い本質型を持つ算術変換を伴う演算を示します(ルール10.7)
より広い型への複合キャスト複合式がより広い本質型または異なる本質型カテゴリにキャストされることを示します(ルール10.8)
関数ポインタキャストの不一致関数ポインタと他の型との間のキャストを示します(ルール11.1)
ポインタキャストの不一致異なるオブジェクト型へのポインタ間のキャストを示します(ルール11.3)
キャストで削除された型修飾子キャストにおける const または volatile 修飾子の削除を示します(ルール11.8)

式の構造

交換可能な関数が利用可能交換可能な関数があるマクロを使用していることを示します(指令4.9)
適切に終了していないエスケープシーケンス適切に終了していない 8 進数または 16 進数のエスケープシーケンスを示します(ルール4.1)
3文字表記3文字表記の使用を示します(ルール4.2)
初期化子の中括弧または値の欠落中括弧または値が不十分な配列、構造体、共用体、または列挙型の初期化を示します(ルール9.2)
部分的にゼロになる配列単一の"0"で初期化された配列変数を示します。全ての配列要素でゼロが指定される可能性があります
部分的に初期化される配列配列の次元よりも少ない値で初期化された配列変数を示します
不明瞭な部分式意図したように書かれていない可能性のある部分式を示します。静的に評価できる符号なし変数と負数の比較などがあります。疑わしい関係演算子の使用、丸括弧の欠如の可能性などをとらえます(例: x && y | z)(ルール12.1)
範囲を超えたシフト右オペランドが左オペランドの本質型のビット幅の範囲外であるシフト操作を示します(ルール12.2)
カンマ演算子カンマ演算子の使用を示します(ルール12.3)
定数のラップアラウンド式中の符号なし定数の評価でのラップアラウンドを示します(ルール12.4)
ブール式での代入ブール値式のオペランドとして代入演算子が使われていることを示します(ルール13.4)
疑わしい代入条件式または引数リストで、実際には比較を意図しているような疑わしい代入を示します
sizeofの潜在的な副作用オペランドに副作用の可能性がある式が含まれるsizeof 演算子の使用を示します(ルール13.6)
算術演算で使われているポインタポインタ型の式が +, -, +=, -= 演算子で使用されていることを示します(ルール18.4)
前処理指令を含むマクロ引数前処理指令のように見えるマクロ引数を示します(ルール20.6)
括弧を必要とするマクロマクロ仮引数の展開された式で、括弧が必要であることを示します(ルール20.7)
前処理指令内の未定義マクロ#ifまたは#elif前処理指令で、未定義のマクロを使用していることを示します(ルール20.9)
# または ## が使われているマクロマクロ定義で # または ## 前処理演算子が使われていることを示します(ルール20.10)
複数の # および/または ## が使われているマクロマクロ定義で2つ以上の # および/または ## 前処理演算子が使われていることを示します(ルール20.11)
ビルトイン演算子の数"1つの式の中から、ビルトイン演算子の数がユーザ指定の閾値を超えることを示します
式内の関数の数1つの式の中から、関数呼び出しの数がユーザ指定の閾値を超えることを示します
古い型のアロケータmalloc、realloc、calloc、またはfreeなど、C++プログラムで古い型のメモリアロケータの使用を示します

ステートメント

移植性の問題sizeofのDiab拡張や集成体リテラルのGNU拡張など、ISO C/ISO C++と互換性のない言語拡張を示します(ルール1.2)
コメント文字を含むコメントコメント内で /* または // を使用していることを示します(ルール3.1)
行接合を含むコメント// コメント中で行接合を使用していることを示します(ルール3.2)
static 指定子の欠落内部結合を持つ関数やオブジェクトの宣言で、static指定子が使われていないことを示します(ルール8.8))
空文コードの欠落を示す可能性があるため、if、 else、 while の中の空文があることを示します
疑わしい for ループ3つの制御式、または3つの制御式と for 本体がうまく形成されていない for ループを示します(ルール14.2)
ジャンプ文制御の流れを理解しにくくする可能性があるため、goto、break、continue文の使用を示します
goto 文goto 文を使用していることを示します(ルール15.1)
上方ラベルに飛ぶ goto 文関数内で先に宣言されたラベルにジャンプする goto 文を示します(ルール15.2)
ブロック外に飛ぶ goto 文同じブロックの外、あるいはその goto 文を囲むブロックの外のラベルにジャンプする goto 文を示します(ルール15.3)
複合文が必要欠落している可能性のある複合文 { } を示します。これは、else文、またはwhile、forから誤って分離された文によって生じる可能性のあるエラーも含まれます(ルール15.6)
最後の else の欠落else 文で終了しない if ... else if 文の構成を示します(ルール15.7)
switchラベルのレベル最も近い複合文がswitch文の本体でないswitchラベルがあることを示します(ルール16.2)
終端のないCasebreak文など、明示的な制御の移転で終了しないswitch文のcase節を示します(ルール16.3)
デフォルト節の欠落デフォルト節のない switch文を示します(ルール16.4)
デフォルト節の順序"デフォルト節が最初でも最後でもないswitch文であることを示します(ルール16.5)
単一のswitch節switch節が2つ未満のswitch文があることを示します(ルール16.6)
ブール型のswitch式本質的にブール型を持つ switch の制御式があることを示します(ルール16.7)
空のcatch文の一覧空のステートメントを持つcatch文にフラグを立て、ロジックが欠落している可能性があることを示します
無条件catch文1つの句内のすべての例外をキャッチするcatch文にフラグを立て、ロジックが欠落している可能性があることを示します
省略されたreturn関数呼び出し、または計算が記憶されない他の式の結果を無視する文を示します。これは通常、エラー結果が無視されることを示します
過剰なポインタのネスト2レベル以上のポインタのネストを含む宣言があることを示します(ルール18.5)
不適切なincludeディレクティブ<filename> または "filename" 以外が続く #includeディレクティブがあることを示します(ルール20.3)

関数

戻り値型の欠落戻り値型を指定しない関数宣言を示します(ルール8.1)
仮引数名の欠落仮引数名を指定しない関数宣言を示します(ルール8.2)
空の仮引数リスト(void) の代わりに空括弧 () を使用する関数宣言子を示します(ルール8.2)
仮引数型の不一致関数宣言と関数定義に仮引数型の不一致があることを示します(ルール8.3)
関数宣言の欠落/不一致関数定義と関数呼び出しの間の仮引数型の不一致を示します。 これは、プロトタイプが欠落していたり、一貫性がないC言語の記述に対して有効です
可変個の実引数可変個の実引数を持つ関数を示します
外部宣言の型の不一致関数宣言と外部宣言の仮引数型の不一致を示します(ルール8.4)
宣言されていない関数関数が事前に宣言されずに呼び出されていることを示します(ルール17.3)
K&R形式の宣言C++では有効ではない古いK&R形式の構文を使用する関数宣言子を示します
潜在的静的関数関数が定義されているファイルの内部からしか呼び出されていないにもかかわらず static と宣言されていないことを示します

変数

変数型の欠落明示的に型を指定していない変数宣言を示します(ルール8.1)
変数型の不一致変数宣言と変数定義の間の仮引数型の不一致を示します(ルール8.3)
未使用グローバルプロジェクトにロードされたソースファイルのなかでグローバル変数が使用されていないことを示します
未使用staticローカル変数が使用されていないことを示します
未使用ローカルstatic 変数が使用されていないことを示します

クラス

コンストラクタ無しクラスがコンストラクタを持たないことを示します。クラスオブジェクト初期化の際に問題を避けるため、明示的コンストラクタを常に定義しておくことをおすすめします
問題のあるコンストラクタクラスコンストラクタの問題のある定義を示します。このなかには、コンストラクタからの仮想関数呼び出し、及び初期化順序問題などが含まれます

未解析のコード

省略された行現在の前処理の設定によりアナライザに無視されるソース行を示します
スキップ行アナライザが解決できない構文問題によりスキップされるソース行を示します。ソースがオリジナルの開発環境でコンパイル可能な場合、これはインクルードファイルの欠落、またはアナライザの誤った設定を示す可能性があります