<QtCompilerDetection> - Compiler-specific Macro Definitions

<QtCompilerDetection> ヘッダーファイルには、コンパイラ固有のさまざまなマクロが含まれています。詳細...

Header: #include <QtCompilerDetection>

マクロ

詳細な説明

<QtCompilerDetection> ヘッダーファイルは、アプリケーションが指定されたコンパイラを使用してコンパイルされた場合に定義される一連のマクロ (Q_CC_*) を提供します。たとえば、Q_CC_SUN マクロは、アプリケーションがForte DeveloperまたはSun Studio C++を使用してコンパイルされた場合に定義されます。

これらのマクロの目的は、プログラマがアプリケーションにコンパイラ固有のコードを追加できるようにすることです。

マクロのドキュメント

Q_CC_BOR

アプリケーションがBorland/Turbo C++を使用してコンパイルされた場合に定義されます。

Q_CC_CDS

アプリケーションがReliant C++を使用してコンパイルされた場合に定義されます。

Q_CC_CLANG

アプリケーションが Clang を使用してコンパイルされた場合に定義されます。

Q_CC_COMEAU

アプリケーションがComeau C++を使用してコンパイルされた場合に定義されます。

Q_CC_DEC

アプリケーションが DEC C++ を使用してコンパイルされた場合に定義されます。

Q_CC_EDG

アプリケーションがEdison Design GroupのC++を使用してコンパイルされた場合に定義されます。

Q_CC_GHS

このアプリケーションが Green Hills の最適化 C++ コンパイラを使用してコンパイルされた場合に定義されます。

Q_CC_GNU

アプリケーションが GNU Compiler Collection (GCC) を使用してコンパイルされた場合に定義されます。

Q_CC_HIGHC

アプリケーションがMetaWare High C/C++を使用してコンパイルされた場合に定義されます。

Q_CC_HPACC

アプリケーションが HP aC++ を使用してコンパイルされた場合に定義されます。

Q_CC_KAI

アプリケーションが KAI C++ を使用してコンパイルされた場合に定義されます。

Q_CC_MIPS

アプリケーションが MIPSpro C++ を使用してコンパイルされた場合に定義されます。

Q_CC_MSVC

アプリケーションが Microsoft Visual C/C++ または Intel C++ for Windows を使用してコンパイルされた場合に定義されます。

Q_CC_OC

アプリケーションがCenterLine C++を使用してコンパイルされた場合に定義されます。

Q_CC_PGI

アプリケーションがPortland Group C++を使用してコンパイルされた場合に定義されます。

Q_CC_SUN

アプリケーションがForte DeveloperまたはSun Studio C++を使用してコンパイルされた場合に定義されます。

Q_CC_SYM

アプリケーションが Digital Mars C/C++(旧 Symantec C++)を使用してコンパイルされた場合に定義されます。

Q_CC_USLC

アプリケーションが SCO OUDK および UDK を使用してコンパイルされた場合に定義されます。

Q_CC_WAT

アプリケーションがWatcom C++を使用してコンパイルされた場合に定義されます。

[since 6.9] Q_CONSTEXPR_DTOR

C++20をサポートするコンパイラでは、constexpr に展開されます。この場合、__cpp_constexpr の値は201907L 以上となります。それ以外の場合は、const に展開されます。

このマクロを使用すると、C++20以降でコンパイル時に構築可能な変数を宣言できます。

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

Q_DECL_CONSTEXPR_DTORも参照してください 。

[since 6.4] Q_CONSTINIT

コンパイラがサポートしている場合、定数初期化を強制します。

コンパイラが C++20 の `constinit ` キーワード、Clang の `[[clang::require_constant_initialization]] `、または GCC の `__constinit` をサポートしている場合、このマクロは利用可能なものの中で最初のものに展開されます。それ以外の場合は、何も展開されません。

constinit としてマークされた変数は、その初期化が実行時に実行されなければならない場合、コンパイルエラーを引き起こします。

注:定数で初期化された 変数であっても、破壊処理が単純でない場合は、ロード時に影響を与える可能性があります。

定数については、C++11以降でconstexpr を使用できますが、constexpr は変数をconst にもします。一方、constinit は定数初期化を保証しますが、変数をconst にはしません:

キーワード追加immutable不変定数初期化済み
constC++98はい必須ではない
constexprC++11はい必須
constinitC++20不要必須

Q_CONSTINIT 変数の宣言と定義が別々である場合、このマクロは定義のみに適用され、宣言には適用されません:

class C {
    ~~~~
    static int count; // declaration, no Q_CONSTINIT here
};
~~~
Q_CONSTINIT int C::count = 0; // definition

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

[since 6.9] Q_DECL_CONSTEXPR_DTOR

C++20をサポートするコンパイラでは、constexpr に展開されます。この場合、__cpp_constexpr の値は201907L 以上となります。それ以外の場合は、inline に展開されます。

このマクロを使用して、C++20以降でコンパイル時に計算可能なデストラクタを宣言します。

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

Q_CONSTEXPR_DTORも参照してください 。

[since 6.9] Q_DECL_EQ_DELETE_X(reason)

C++26をサポートするコンパイラでは、= delete(reason) に展開されます。この場合、__cpp_deleted_function の値は202403L 以上となります。それ以外の場合は、= delete に展開されます。

このマクロを使用すると、削除された関数を宣言すると同時に、その関数が誤って使用された場合にユーザーに対してエラーメッセージ(reason )を表示し(関数が削除された理由を説明する)、エラーメッセージを提示することができます。

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

Q_DECL_EXPORT

このマクロは、シンボルを共有ライブラリのエクスポート対象として指定します(「共有ライブラリの作成」を参照)。

Q_DECL_IMPORTも参照してください 。

Q_DECL_IMPORT

このマクロは、シンボルを共有ライブラリからのインポートとして宣言します(「共有ライブラリの作成」を参照)。

「Q_DECL_EXPORT」も参照してください 。

[since 6.12] Q_DECL_NONALLOCATING_FUNCTION

この機能をサポートする clang コンパイラでは、[[clang::nonallocating]] に展開されます。

この関数が、ヒープからメモリを割り当てることも、例外をスローすることも決してないことを宣言します。

clangの関数効果解析およびリアルタイムサニタイザーで使用されます。

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

Q_DECL_NONBLOCKING_FUNCTIONも参照してください 。

[since 6.12] Q_DECL_NONBLOCKING_FUNCTION

この機能をサポートする clang コンパイラでは、[[clang::nonblocking]] に展開されます。

この関数がロックでブロックされることがなく、ヒープからメモリを割り当てず、例外をスローしないことを宣言します。

clangの関数効果解析(Function Effect Analysis)およびリアルタイムサニタイザー(Realtime Sanitizer)で使用されます。

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

Q_DECL_NONALLOCATING_FUNCTIONも参照してください 。

void Q_FALLTHROUGH()

caseブロックの末尾にあるswitch文で使用することで、break文がないことが意図的であることをコンパイラや他の開発者に伝えることができます。

break文の欠落は多くの場合バグであるため、これは有用です。また、一部のコンパイラでは、break文が見つからない場合に警告を出力するように設定できるものもあります。

Q_UNREACHABLE() およびQ_UNREACHABLE_RETURN()も参照してください 。

const char *Q_FUNC_INFO

このマクロが属する関数を記述する文字列に展開されます。この文字列の具体的な形式はコンパイラによって異なります。GNU GCC では通常、関数のシグネチャとなりますが、他のコンパイラでは行番号と列番号となる場合もあります。

Q_FUNC_INFO は、qDebug() と組み合わせて便利に利用できます。例えば、次の関数では:

template<typenameTInputType>
constTInputType&myMin(constTInputType&value1, constTInputType&value2)
{
    qDebug() << Q_FUNC_INFO << "was called with value1:" << value1 << "value2:" << value2;

   if(value1<value2)
        returnvalue1;
    else
        returnvalue2;
}

整数型でインスタンス化すると、GCC コンパイラでは次のような結果が生成されます:

const TInputType& myMin(const TInputType&, const TInputType&) [with TInputType = int] was called with value1: 3 value2: 4

このマクロを関数の外で使用した場合、その挙動は未定義となります。

Q_LIKELY(expr)

コンパイラに対し、囲まれた条件式 `expr` が `true` と評価される可能性が高いことを示唆します。

このマクロを使用することで、コンパイラがコードを最適化しやすくなります。

例:

    // the condition inside the "if" will be successful most of the times
    for (int i = 1; i <= 365; i++) {
        if (Q_LIKELY(isWorkingDay(i))) {
            //...
        }
        //...
    }

Q_UNLIKELY()、Q_LIKELY_BRANCH 、およびQ_UNLIKELY_BRANCHも参照してください 。

[since 6.9] Q_LIKELY_BRANCH

コンパイラに対し、次のブロックが実行される可能性が高いことを示唆します。

このマクロを使用することで、コンパイラがコードを最適化しやすくなります。

これは C++20 の属性 `[[likely]]` として定義されており、これをサポートしていないコンパイラでは何もしません。

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

Q_LIKELY()、Q_UNLIKELY()、およびQ_UNLIKELY_BRANCHも参照してください 。

[since 6.6] Q_NODISCARD_CTOR

コンストラクタでこれを許容するコンパイラでは、[[nodiscard]] に展開されます。

それ以外の場合は、何にも展開されません。

Q_NODISCARD_CTOR としてマークされたコンストラクタは、呼び出し元で生成されたオブジェクトが使用されない場合、コンパイラから警告が出されます。

このマクロは、この機能を実装していないコンパイラでの警告を防ぐためだけに存在します。サポート対象のプラットフォームすべてでコンストラクタでの `[[nodiscard]] ` が許可されている場合は、このマクロの代わりに C++ アトリビュートを直接使用することを強く推奨します。

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

Q_NODISCARD_CTOR_Xも参照してください 。

[since 6.7] Q_NODISCARD_X(message)

[since 6.7] Q_NODISCARD_CTOR_X(message)

この機能をサポートするコンパイラでは、[[nodiscard(message)]] に展開されます。

それ以外の場合は、それぞれ[[nodiscard]] およびQ_NODISCARD_CTOR に展開されます。

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

Q_NODISCARD_CTORも参照してください 。

Q_UNLIKELY(expr)

コンパイラに対し、囲まれた条件式 `expr` が `false` と評価される可能性が高いことを示唆します。

このマクロを使用することで、コンパイラによるコードの最適化が促進されます。

例:

boolreadConfiguration(constQFile&file)
{
    // 既存のファイルを読み込むよう要求されることが想定される
    if(Q_UNLIKELY(!file.exists())) {
        qWarning() << "File not found";
       return false;
    }

    //...
    return true;
}

Q_LIKELY()、Q_LIKELY_BRANCH 、およびQ_UNLIKELY_BRANCHも参照してください 。

[since 6.9] Q_UNLIKELY_BRANCH

コンパイラに対し、次のブロックが実行される可能性が低いことを示唆します。

このマクロを使用することで、コンパイラによるコードの最適化が促進されます。

これは C++20 の属性 `[[unlikely]]` として定義されており、これをサポートしていないコンパイラでは何もしません。

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

Q_LIKELY()、Q_UNLIKELY()、およびQ_LIKELY_BRANCHも参照してください 。

© 2026 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.