<QtAssert> プロキシページ
関数
T * | q_check_ptr(T *p) |
マクロ
void | Q_ASSERT(bool test) |
void | Q_ASSERT_X(bool test, const char *where, const char *what) |
void | Q_CHECK_PTR(void *pointer) |
void | Q_UNREACHABLE |
(since 6.5) void | Q_UNREACHABLE_RETURN(...) |
関数ドキュメント
template <typename T> T *q_check_ptr(T *p)
p でQ_CHECK_PTR を使用し、p を返します。
これはQ_CHECK_PTR のインライン版として使用できます。
マクロ・ドキュメント
void Q_ASSERT(bool test)
test がfalse
の場合、ソース・コード・ファイル名と行番号を含む警告メッセージを出力します。
Q_ASSERT() は、開発中に事前条件と事後条件をテストするのに便利です。コンパイル時にQT_NO_DEBUG
が定義されていた場合は、何も行いません。
例
// File: div.cpp #include <QtGlobal> int divide(int a, int b) { Q_ASSERT(b != 0); return a / b; }
b
が 0 の場合、Q_ASSERT 文はqFatal() 関数を使用して、以下のメッセージを出力します:
ASSERT: "b != 0" in file div.cpp, line 7
Q_ASSERT_X ()、qFatal ()、および「デバッグ技法」も参照して ください。
void Q_ASSERT_X(bool test, const char *where, const char *what)
test がfalse
の場合、what のメッセージと、where の場所、ソース・ファイル名、および行番号を出力します。
Q_ASSERT_X は、開発中に事前条件と事後条件をテストするのに便利です。コンパイル時にQT_NO_DEBUG
が定義されていた場合は何もしません。
例
// File: div.cpp #include <QtGlobal> int divide(int a, int b) { Q_ASSERT_X(b != 0, "divide", "division by zero"); return a / b; }
b
がゼロの場合、Q_ASSERT_X 文は、qFatal() 関数を使用して、以下のメッセージを出力します:
ASSERT failure in divide: "division by zero", file div.cpp, line 7
Q_ASSERT ()、qFatal ()、および「デバッグ技法」も参照してください 。
void Q_CHECK_PTR(void *pointer)
pointer がnullptr
の場合、ソース・コードのファイル名と行番号を含むメッセー ジを出力し、プログラムがメモリ不足になったことを伝え、プログラムの実行を 中断します。例外が有効な場合は、代わりにstd::bad_alloc
をスローします。
Q_CHECK_PTR は、コンパイル時にQT_NO_DEBUG
とQT_NO_EXCEPTIONS
が定義されていた場合は何もしません。したがって、Q_CHECK_PTRを使用してメモリ割り当てが成功したかどうかをチェックすることはできません。
例
int *a; Q_CHECK_PTR(a = new int[80]); // WRONG! a = new (nothrow) int[80]; // Right Q_CHECK_PTR(a);
void Q_UNREACHABLE
コンパイラに、現在のポイントにはどのような実行でも到達できないので、ここから続くコードパスもデッドコードとして最適化してもよい、と伝えます。
このマクロは、不可能な条件をマークするのに便利である。たとえば、次のようなenumがあるとする:
enum Shapes { Rectangle, Triangle, Circle, NumShapes };
このようにスイッチ・テーブルを書くことができる:
switch (shape) { case Rectangle: return rectangle(); case Triangle: return triangle(); case Circle: return circle(); case NumShapes: Q_UNREACHABLE(); break; }
この時点でQ_UNREACHABLE()を挿入する利点は、コンパイラにその値を含むshape変数のコードを生成しないように指示することである。マクロがない場合でも、コンパイラはその値に対して必要な比較を生成する。もし case ラベルが削除されると、コンパイラによっては enum 値がチェックされないという警告を出す可能性がある。
このマクロを不可能な条件で使用することにより、デッド・コード・パスが排除され、コード・カバレッジが向上する可能性がある。
デバッグビルドでは、この条件はデバッグを容易にするためにアサートで強制される。
注意: マクロQ_UNREACHABLE_RETURN() を使用すると、return 文を必要とするコンパイラに警告を出さずに return 文を挿入できる。
Q_ASSERT()、qFatal()、Q_UNREACHABLE_RETURN()も参照のこと 。
[since 6.5]
void Q_UNREACHABLE_RETURN(...)
これは
Q_UNREACHABLE();
return __VA_ARGS__;
と同等ですが、警告を出すコンパイラでは return を省略します。
このマクロは Qt 6.5 で導入されました。
Q_UNREACHABLE()も参照してください 。
©2024 The Qt Company Ltd. 本書に含まれるドキュメントの著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。