<Qt编译器检测> - 针对编译器的宏定义

<QtCompilerDetection> 头文件包含了各种针对特定编译器的宏。 更多信息...

头文件 #include <QtCompilerDetection>

详细描述

<QtCompilerDetection> 头文件提供了一组宏(Q_CC_*),如果应用程序使用指定的编译器编译,则会定义这些宏。例如,如果应用程序使用 Forte Developer 或 Sun Studio C++ 编译,则定义了 Q_CC_SUN 宏。

这些宏的目的是使程序员能够向其应用程序添加针对编译器的代码。

宏文档

[自 6.7] Q_NODISCARD_CTOR_X(message)

[自 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

如果应用程序是用埃迪生设计小组C++编译的,则定义此宏。

Q_CC_GHS

如果应用程序是用Green Hills Optimizing C++编译器编译的,则定义此宏。

Q_CC_GNU

如果应用程序是用GNU编译器集合(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++20的constinit关键字,Clang的[[clang::require_constant_initialization]]或GCC的__constinit,则此宏扩展为这些中第一个可用者,否则不展开。

标记为constinit的变量如果其初始化需要在运行时执行,则会引发编译错误。

注意:如果变量具有非平凡析构函数,则常量初始化的变量仍然可能有加载时间影响。

对于常量,您可以从C++11开始使用constexpr,但constexpr使得变量也变成const,而constinit确保常量初始化,但不会使变量成为const

关键字添加不可变常量初始化
常量C++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块末尾,以告诉编译器和开发人员缺失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;
}

使用整型实例化时,将使用GCC编译器产生

const TInputType& myMin(const TInputType&, const TInputType&) [with TInputType = int] 调用了 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的构造函数如果在调用点未使用生成的对象,则会造成编译器警告。

此宏的存在 solely 仅是为了防止在不实现该功能的编译器上发出警告。如果您的支持平台都允许在构造函数上使用[[nodiscard]],我们强烈建议您直接使用C++属性而不是此宏。

此宏是在Qt 6.6中引入的。

另请参阅 Q_NODISCARD_CTOR_X

[自 6.7] Q_NODISCARD_CTOR_X(message)

此宏是在Qt 6.7中引入的。

[自 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

© 2024 The Qt Company Ltd. 本文件中包含的文档贡献受其各自所有者的版权所有。此处提供的文档根据自由软件基金会发布的GNU自由文档许可协议版本1.3的条款授予许可。Qt和相应的标志是The Qt Company Ltd.在芬兰和/或全世界其他国家的商标。所有其他商标均为其各自所有者的财产。