<QtCompilerDetection> - Compiler-specific Macro Definitions

El fichero de cabecera <QtCompilerDetection> incluye varias macros específicas del compilador. Más...

Header: #include <QtCompilerDetection>

Macros

Descripción detallada

El archivo de cabecera <QtCompilerDetection> proporciona una serie de macros (Q_CC_*) que se definen si la aplicación se compila utilizando el compilador especificado. Por ejemplo, la macro Q_CC_SUN se define si la aplicación se compila usando Forte Developer, o Sun Studio C++.

El propósito de estas macros es permitir a los programadores añadir código específico del compilador a su aplicación.

Documentación de macros

Q_CC_BOR

Definido si la aplicación se compila utilizando Borland/Turbo C++.

Q_CC_CDS

Definido si la aplicación se compila utilizando Reliant C++.

Q_CC_CLANG

Definido si la aplicación se compila usando Clang.

Q_CC_COMEAU

Definido si la aplicación se compila usando Comeau C++.

Q_CC_DEC

Definido si la aplicación se compila utilizando DEC C++.

Q_CC_EDG

Definido si la aplicación se compila utilizando Edison Design Group C++.

Q_CC_GHS

Definido si la aplicación se compila utilizando Green Hills Optimizing C++ Compilers.

Q_CC_GNU

Definido si la aplicación se compila utilizando GNU Compiler Collection (GCC).

Q_CC_HIGHC

Definido si la aplicación se compila utilizando MetaWare High C/C++.

Q_CC_HPACC

Definido si la aplicación se compila utilizando HP aC++.

Q_CC_KAI

Se define si la aplicación se compila utilizando KAI C++.

Q_CC_MIPS

Definido si la aplicación se compila utilizando MIPSpro C++.

Q_CC_MSVC

Se define si la aplicación se compila con Microsoft Visual C/C++, Intel C++ para Windows.

Q_CC_OC

Se define si la aplicación se compila con CenterLine C++.

Q_CC_PGI

Definido si la aplicación se compila utilizando Portland Group C++.

Q_CC_SUN

Se define si la aplicación se compila con Forte Developer o Sun Studio C++.

Q_CC_SYM

Definido si la aplicación se compila utilizando Digital Mars C/C++ (antes era Symantec C++).

Q_CC_USLC

Definido si la aplicación se compila utilizando SCO OUDK y UDK.

Q_CC_WAT

Definido si la aplicación se compila utilizando Watcom C++.

[since 6.9] Q_CONSTEXPR_DTOR

Se expande a constexpr en compiladores compatibles con C++20, cuando __cpp_constexpr tiene un valor mayor o igual que 201907L. En caso contrario, se expande a const.

Utilice esta macro para declarar una variable que pueda construirse en tiempo de compilación en C++20 o posterior.

Esta macro se introdujo en Qt 6.9.

Véase también Q_DECL_CONSTEXPR_DTOR.

[since 6.4] Q_CONSTINIT

Impone la inicialización constante cuando el compilador la soporta.

Si el compilador soporta la palabra clave C++20 constinit, Clang's [[clang::require_constant_initialization]] o GCC's __constinit, entonces esta macro se expande a la primera de ellas que esté disponible, de lo contrario no se expande a nada.

Las variables marcadas como constinit provocan un error de compilación si su inicialización debe realizarse en tiempo de ejecución.

Nota: Las variables inicializadas por constantes pueden tener un impacto en tiempo de carga si su destrucción no es trivial.

Para constantes, puedes usar constexpr desde C++11, pero constexpr hace que las variables sean const, también, mientras que constinit asegura la inicialización constante, pero no hace que la variable sea const:

Palabra claveAñadidoinmutableinicialización constante
constC++98no necesario
constexprC++11necesario
constinitC++20noobligatorio

Si la declaración y la definición de una variable Q_CONSTINIT están separadas, esta macro va sólo en la definición, y no en la declaración:

class C {
    ~~~~
    static int count; // declaration, no Q_CONSTINIT here
};
~~~
Q_CONSTINIT int C::count = 0; // definition

Esta macro se introdujo en Qt 6.4.

[since 6.9] Q_DECL_CONSTEXPR_DTOR

Se expande a constexpr en compiladores compatibles con C++20, cuando __cpp_constexpr tiene un valor mayor o igual que 201907L. En caso contrario, se expande a inline.

Utilice esta macro para declarar un destructor que pueda ser calculado en tiempo de compilación en C++20 o posterior.

Esta macro se introdujo en Qt 6.9.

Véase también Q_CONSTEXPR_DTOR.

[since 6.9] Q_DECL_EQ_DELETE_X(reason)

Se expande a = delete(reason) en compiladores compatibles con C++26, cuando __cpp_deleted_function tiene un valor mayor o igual que 202403L. En caso contrario, se expande a = delete.

Utilice esta macro para declarar una función eliminada y también para proporcionar un mensaje de error ( reason) al usuario en caso de que se utilice la función (explicando por qué se eliminó la función).

Esta macro se introdujo en Qt 6.9.

Q_DECL_EXPORT

Esta macro marca un símbolo para la exportación de bibliotecas compartidas (véase Creación de bibliotecas compartidas).

Véase también Q_DECL_IMPORT.

Q_DECL_IMPORT

Esta macro declara que un símbolo es una importación de una biblioteca compartida (véase Creación de bibliotecas compartidas).

Véase también Q_DECL_EXPORT.

void Q_FALLTHROUGH()

Puede utilizarse en sentencias switch al final de un bloque case para indicar al compilador y a otros desarrolladores que la ausencia de una sentencia break es intencionada.

Esto es útil ya que la falta de una sentencia break es a menudo un error, y algunos compiladores pueden ser configurados para emitir advertencias cuando no se encuentra una.

Véase también Q_UNREACHABLE() y Q_UNREACHABLE_RETURN().

const char*Q_FUNC_INFO()

Se expande a una cadena que describe la función en la que reside la macro. El aspecto específico de esta cadena depende del compilador. Con GNU GCC suele ser la firma de la función, mientras que con otros compiladores puede ser el número de línea y columna.

Q_FUNC_INFO puede utilizarse convenientemente con qDebug(). Por ejemplo, esta función:

template<typename TInputType>const TInputType &myMin(const TInputType &value1, const TInputType &value2){
    qDebug() << Q_FUNC_INFO << "was called with value1:" << value1 << "value2:" << value2;

   if(valor1 < valor2) return valor1; else return valor2; }

cuando se instancian con el tipo entero, con el compilador GCC producirá:

const TInputType& myMin(const TInputType&, const TInputType&) [with TInputType = int] was called with value1: 3 value2: 4

Si esta macro se utiliza fuera de una función, el comportamiento es indefinido.

Q_LIKELY(expr)

Indica al compilador que es probable que la condición incluida, expr, se evalúe como true.

El uso de esta macro puede ayudar al compilador a optimizar el código.

Ejemplo:

    // the condition inside the "if" will be successful most of the times
    for (int i = 1; i <= 365; i++) {
        if (Q_LIKELY(isWorkingDay(i))) {
            //...
        }
        //...
    }

Véase también Q_UNLIKELY(), Q_LIKELY_BRANCH, y Q_UNLIKELY_BRANCH.

[since 6.9] Q_LIKELY_BRANCH

Indica al compilador que es probable que se ejecute el siguiente bloque.

El uso de esta macro puede ayudar al compilador a optimizar el código.

Se define como el atributo C++20 [[likely]], y es un no-op en compiladores que no lo soportan.

Esta macro se introdujo en Qt 6.9.

Véase también Q_LIKELY(), Q_UNLIKELY(), y Q_UNLIKELY_BRANCH.

[since 6.6] Q_NODISCARD_CTOR

Se expande a [[nodiscard]] en compiladores que lo aceptan en constructores.

En caso contrario no se expande a nada.

Los constructores marcados como Q_NODISCARD_CTOR causan una advertencia del compilador si un sitio de llamada no usa el objeto resultante.

Esta macro existe únicamente para prevenir advertencias en compiladores que no implementan la característica. Si todas sus plataformas soportadas permiten [[nodiscard]] en los constructores, le recomendamos encarecidamente que utilice el atributo C++ directamente en lugar de esta macro.

Esta macro se introdujo en Qt 6.6.

Véase también Q_NODISCARD_CTOR_X.

[since 6.7] Q_NODISCARD_X(message)

[since 6.7] Q_NODISCARD_CTOR_X(message)

Se expanden a [[nodiscard(message)]] en los compiladores que admiten esta función.

De lo contrario, se expanden a [[nodiscard]] y Q_NODISCARD_CTOR, respectivamente.

Estas macros se introdujeron en Qt 6.7.

Véase también Q_NODISCARD_CTOR.

Q_UNLIKELY(expr)

Indica al compilador que es probable que la condición incluida, expr, se evalúe como false.

El uso de esta macro puede ayudar al compilador a optimizar el código.

Ejemplo:

bool readConfiguration(const QFile &file) { // Esperamos que se nos pida leer un fichero existente if (Q_UNLIKELY(!file.exists())) {        qWarning() << "File not found";
       return false; } //... return true; }

Ver también Q_LIKELY(), Q_LIKELY_BRANCH, y Q_UNLIKELY_BRANCH.

[since 6.9] Q_UNLIKELY_BRANCH

Indica al compilador que es poco probable que se ejecute el bloque siguiente.

El uso de esta macro puede ayudar al compilador a optimizar el código.

Se define como el atributo C++20 [[unlikely]], y es un no-op en compiladores que no lo soportan.

Esta macro se introdujo en Qt 6.9.

Véase también Q_LIKELY(), Q_UNLIKELY(), y Q_LIKELY_BRANCH.

© 2026 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.