<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
アプリケーションが Digital Mars C/C++ (以前は Symantec 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
をサポートしている場合、このマクロはこれらのうち最初に使用可能なものに展開されます。
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ブロックの最後にあるswitch文で使用すると、break文がないことが意図的であることをコンパイラや他の開発者に伝えることができます。
break文がないのはバグであることが多く、break文がないときに警告を出すように設定できるコンパイラもあるので、これは便利です。
Q_UNREACHABLE() およびQ_UNREACHABLE_RETURN()も参照のこと 。
const char*Q_FUNC_INFO
マクロが存在する関数を表す文字列に展開します。この文字列が具体的にどのように見えるかはコンパイラに依存します。GNU GCCでは一般的に関数のシグネチャですが、他のコンパイラでは行番号と列番号かもしれません。
Q_FUNC_INFOはqDebug ()と一緒に使うと便利です。例えば、この関数
template<typename TInputType> const TInputType &myMin(const TInputType &value1, const TInputType &value2) { qDebug() << Q_FUNC_INFO << "was called with value1:" << value1 << "value2:" << value2; if(value1 < value2) return value1; else return value2; }
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も参照してください 。
[since 6.7]
Q_NODISCARD_CTOR_X(message)
このマクロは Qt 6.7 で導入されました。
[since 6.7]
Q_NODISCARD_X(message)
このマクロは Qt 6.7 で導入されました。
Q_UNLIKELY(expr)
囲んだ条件expr がfalse
と評価される可能性が高いことをコンパイラに示唆する。
このマクロを使用すると、コンパイラがコードを最適化するのに役立ちます。
例
bool readConfiguration(const QFile &file) { // We expect to be asked to read an existing file if (Q_UNLIKELY(!file.exists())) { qWarning() << "File not found"; return false; } ... return true; }
Q_LIKELY()も参照してください 。
本書に含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。