<QtCompilerDetection> - Compiler-specific Macro Definitions
<QtCompilerDetection> ヘッダーファイルには、様々なコンパイラ固有のマクロが含まれています。詳細...
Header: | #include <QtCompilerDetection> |
マクロ
(since 6.7) | |
Q_CC_BOR | |
Q_CC_CDS | |
Q_CC_CLANG | |
Q_CC_COMEAU | |
Q_CC_DEC | |
Q_CC_EDG | |
Q_CC_GHS | |
Q_CC_GNU | |
Q_CC_HIGHC | |
Q_CC_HPACC | |
Q_CC_KAI | |
Q_CC_MIPS | |
Q_CC_MSVC | |
Q_CC_OC | |
Q_CC_PGI | |
Q_CC_SUN | |
Q_CC_SYM | |
Q_CC_USLC | |
Q_CC_WAT | |
(since 6.9) | Q_CONSTEXPR_DTOR |
(since 6.4) | Q_CONSTINIT |
(since 6.9) | Q_DECL_CONSTEXPR_DTOR |
(since 6.9) | Q_DECL_EQ_DELETE_X(reason) |
Q_DECL_EXPORT | |
Q_DECL_IMPORT | |
void | Q_FALLTHROUGH |
const char* | Q_FUNC_INFO |
Q_LIKELY(expr) | |
(since 6.9) | Q_LIKELY_BRANCH |
(since 6.6) | Q_NODISCARD_CTOR |
(since 6.7) | Q_NODISCARD_CTOR_X(message) |
(since 6.7) | Q_NODISCARD_X(message) |
Q_UNLIKELY(expr) | |
(since 6.9) | Q_UNLIKELY_BRANCH |
詳しい説明
<QtCompilerDetection> ヘッダファイルは、アプリケーションが指定されたコンパイラでコンパイルされた場合に定義されるマクロ (Q_CC_*) を提供します。例えば、Q_CC_SUN マクロは、アプリケーションが Forte Developer または Sun Studio C++ を使用してコンパイルされた場合に定義されます。
これらのマクロの目的は、プログラマーがコンパイラー固有のコードをアプリケー ションに追加できるようにすることです。
マクロ・ドキュメント
この機能をサポートしているコンパイラーでは[[nodiscard(message)]]
に展開される。
そうでない場合は、それぞれ[[nodiscard]]
とQ_NODISCARD_CTOR に展開されます。
この関数は Qt 6.7 で導入されました。
Q_NODISCARD_CTORも参照してください 。
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 Optimizing C++ Compilers を使用してコンパイルされている場合に定義されます。
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
アプリケーションがデジタルマーズC/C++(以前はシマンテック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++20constinit
キーワード、Clang の[[clang::require_constant_initialization]]
キーワード、または GCC の__constinit
キーワードをサポートしている場合、このマクロは使用可能なこれらの最初の 1 つに展開されます。
constinit
とマークされた変数は、実行時に初期化する必要がある場合、コンパイルエラーになります。
注意: 定数で初期化された変数が自明でない破壊を持つ場合、ロード時に影響を与える可能性があります。
定数については、C++11 以降constexpr
を使用できますが、constexpr
では変数もconst
になります。一方、constinit
では定数の初期化は保証されますが、変数はconst
にはなりません:
キーワード | 追加された | 不変 | 定数初期化 |
---|---|---|---|
const | C++98 | はい | 必須ではない |
constexpr | C++11 | 必要 | 必須 |
constinit | C++20 | 不要 | 必須 |
このマクロは 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も参照してください 。
void Q_FALLTHROUGH
switch文のcaseブロックの最後で使用することで、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; }
integer型でインスタンス化された場合、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も参照して ください。
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も参照してください 。
© 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.