<QtCompilerDetection> - Compiler-specific Macro Definitions

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

Header: #include <QtCompilerDetection>

マクロ

詳しい説明

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

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

マクロ・ドキュメント

[since 6.7] Q_NODISCARD_CTOR_X(message)

[since 6.7] Q_NODISCARD_X(message)

この機能をサポートしているコンパイラーでは、[[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 にはなりません:

キーワード追加された不変定数初期化
constC++98はい必須ではない
constexprC++11必要必須
constinitC++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)

囲んだ条件exprtrue と評価される可能性が高いことをコンパイラに示します。

このマクロを使うと、コンパイラがコードを最適化するのに役立ちます。

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

囲んだ条件exprfalse と評価される可能性が高いことをコンパイラに示唆する。

このマクロを使用すると、コンパイラがコードを最適化するのに役立ちます。

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.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。