<QtCompilerDetection> - Compiler-specific Macro Definitions

<QtCompilerDetection> 头文件包含各种特定于编译器的宏。更多

Header: #include <QtCompilerDetection>

详细描述

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

这些宏的目的是使程序员能够在应用程序中添加特定于编译器的代码。

宏文档

[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 编译器集 (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.9] Q_CONSTEXPR_DTOR

在支持 C++20 的编译器上,如果__cpp_constexpr 的值大于或等于201907L ,则会扩展为constexpr 。否则将扩展为const

在 C++20 或更高版本中,使用此宏来声明一个可在编译时构造的变量。

此宏在 Qt 6.9 中引入。

另请参见 Q_DECL_CONSTEXPR_DTOR

[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 中引入。

[since 6.9] Q_DECL_CONSTEXPR_DTOR

在支持 C++20 的编译器上,如果__cpp_constexpr 的值大于或等于201907L ,则会扩展为constexpr 。否则,将扩展为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

可用于 case 代码块末尾的 switch 语句,以告诉编译器和其他开发人员,缺少 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; }

当实例化为整数类型时,在 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.