特定のタイプの実行時検査を行うコードを生成する。違反が検出された場合は、SIGTRAP シグナルをプロセスに送信することによって、実行時例外が発生します。
ここで、
all 以下のサブオプションをすべてオンに切り替えます。no... 形式の 1 つまたは複数の他のオプションとともに、 all オプションをフィルターとして使用することができます。 例えば、以下を使用すると、
xlc++ myprogram.C -qcheck=all:nonullptr
ストレージの参照に使用するポインター変数に含まれるアドレスを除いて、すべての検査が行われます。
no... 形式のオプションとともに all を使用する場合は、 all は最初のサブオプションでなければなりません。
NULLptr | NONULLptr ストレージの参照に使用するポインター変数に含まれるアドレスの実行時検査を行います。アドレスは、使用する位置で検査されます。値が 512 より小さい場合は、トラップが起こります。 bounds | nobounds 既知のサイズのオブジェクト内の添え字を指定するときに、アドレスの実行時検査を行います。指標が検査され、結果がオブジェクトのストレージの境界内のアドレスになることが確認されます。アドレスがオブジェクトの境界内にない場合は、トラップが起こります。 このサブオプションは、可変長配列へのアクセスに有効ではありません。
DIVzero | NODIVzero 整数除法の実行時検査を行います。 0 による除法を行おうとすると、トラップが起こります。
#pragma optionsも参照してください。
-qcheck オプションには、上記のとおり、幾つかのサブオプションがあります。複数のサブオプション を使用する場合は、コロン (:) でそれぞれを区切ってください。
サブオプション、およびコマンド行の -qcheck 以外のバリエーションなしで -qcheck オプションを指定すると、すべてのサブオプションがオンになります。
サブオプションを指定して -qcheck オプションを使用すると、 no プレフィックスがない場合は指定したサブオプションがオンになり、 no プレフィックスがある場合はオフになります。
-qcheck オプションは、複数回指定することができます。サブオプションの設定は累積されますが、後のサブオプションによって前のサブオプションがオーバーライドされます。
-qcheck オプションは、アプリケーションの実行時のパフォーマンスに影響を及ぼします。検査を有効にすると、実行時検査がアプリケーションに組み込まれるため、実行が遅くなる場合があります。
-qcheck=nullptr:bounds の場合:
void func1(int* p) { *p = 42; /* Traps if p is a null pointer */ } void func2(int i) { int array[10]; array[i] = 42; /* Traps if i is outside range 0 - 9 */ }
-qcheck=divzero の場合:
void func3(int a, int b) { a / b; /* Traps if b=0 */ }