<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.4) | Q_CONSTINIT |
Q_DECL_EXPORT | |
Q_DECL_IMPORT | |
void | Q_FALLTHROUGH |
const char* | Q_FUNC_INFO |
Q_LIKELY(expr) | |
(since 6.6) | Q_NODISCARD_CTOR |
(since 6.7) | Q_NODISCARD_CTOR_X(message) |
(since 6.7) | Q_NODISCARD_X(message) |
Q_UNLIKELY(expr) |
詳しい説明
<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.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 で導入されました。
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()も参照 。
[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()も参照のこと 。
© 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.