<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)

pQ_CHECK_PTR を使い、p を返す。

これはQ_CHECK_PTR のインライン版として使用できます。

マクロ・ドキュメント

void Q_ASSERT(bool test)

testfalse の場合、ソース・コード・ファイル名と行番号を含む警告メッセージを出力します。

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)

メッセージwhat を、where の場所、testfalse の場合はソース・ファイル名と行番号とともに表示します。

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)

pointernullptr の場合、ソース・コードのファイル名と行番号を含むメッセー ジを表示し、プログラムがメモリ不足になったことを伝え、プログラムの実行を 中断する。例外が有効な場合は、代わりにstd::bad_alloc をスローする。

コンパイル時にQT_NO_DEBUGQT_NO_EXCEPTIONS が定義されていた場合、Q_CHECK_PTR は何も行いません。そのため、Q_CHECK_PTRを使用してメモリ割り当てが成功したかどうかをチェックすることはできません。

int *a;

Q_CHECK_PTR(a = new int[80]);   // WRONG!

a = new (nothrow) int[80];      // Right
Q_CHECK_PTR(a);

qWarning()およびデバッグ手法も参照のこと

void Q_UNREACHABLE

コンパイラに、現在のポイントにはどのような実行でも到達できないので、ここから続くコードパスもデッドコードとして最適化してもよい、と伝える。

このマクロは、不可能な条件をマークするのに便利である。たとえば、次のような列挙型があるとする:

   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__;

と同じです。

このマクロは Qt 6.5 で導入されました。

Q_UNREACHABLE()も参照してください

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.