<QtCompilerDetection> - Compiler-specific Macro Definitions

<QtCompilerDetection> 헤더 파일에는 다양한 컴파일러별 매크로가 포함되어 있습니다. 더 보기...

Header: #include <QtCompilerDetection>

매크로

상세 설명

<QtCompilerDetection> 헤더 파일은 애플리케이션이 지정된 컴파일러를 사용하여 컴파일될 경우 정의되는 다양한 매크로(Q_CC_*)를 제공합니다. 예를 들어, 애플리케이션이 Forte Developer 또는 Sun Studio C++를 사용하여 컴파일될 경우 Q_CC_SUN 매크로가 정의됩니다.

이 매크로들의 목적은 프로그래머가 애플리케이션에 컴파일러별 코드를 추가할 수 있도록 하는 것입니다.

매크로 문서

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 최적화 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.9] Q_CONSTEXPR_DTOR

C++20을 지원하는 컴파일러에서는 ` constexpr `로 확장되며, 이때 ` __cpp_constexpr `의 값은 ` 201907L` 이상이어야 합니다. 그렇지 않은 경우 ` const`로 확장됩니다.

이 매크로를 사용하여 C++20 이상에서 컴파일 시점에 생성될 수 있는 변수를 선언하십시오.

이 매크로는 Qt 6.9에서 도입되었습니다.

Q_DECL_CONSTEXPR_DTOR도 참조하십시오 .

[since 6.4] Q_CONSTINIT

컴파일러에서 지원하는 경우 상수 초기화를 강제 적용합니다.

컴파일러가 C++20의 ` constinit ` 키워드, Clang의 ` [[clang::require_constant_initialization]] ` 또는 GCC의 ` __constinit`을 지원하는 경우, 이 매크로는 사용 가능한 것 중 가장 먼저 나오는 것으로 확장되며, 그렇지 않은 경우 아무것도 확장하지 않습니다.

constinit 로 표시된 변수는 초기화가 런타임에 수행되어야 하는 경우 컴파일 오류를 발생시킵니다.

참고: 상수로 초기화된 변수라도 비사소한 소멸 과정을 거치는 경우, 로드 시간에 영향을 미칠 수 있습니다.

상수의 경우 C++11부터 ` constexpr `를 사용할 수 있지만, ` constexpr `는 변수를 ` const`로 만들기도 하는 반면, ` constinit `는 상수 초기화를 보장하지만 변수를 ` const`로 만들지는 않습니다:

키워드추가됨immutable불변 상수 초기화
constC++98예필수 아님
constexprC++11예필수
constinitC++20아니요필수

Q_CONSTINIT 변수의 선언과 정의가 분리되어 있는 경우, 이 매크로는 선언이 아닌 정의 부분에만 적용됩니다:

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

이 매크로는 Qt 6.4에서 도입되었습니다.

[since 6.9] Q_DECL_CONSTEXPR_DTOR

C++20을 지원하는 컴파일러에서는 ` constexpr `로 확장되며, 이때 ` __cpp_constexpr `의 값은 ` 201907L` 이상이어야 합니다. 그렇지 않은 경우 ` inline`로 확장됩니다.

이 매크로를 사용하여 C++20 이상에서 컴파일 시점에 계산할 수 있는 소멸자를 선언하십시오.

이 매크로는 Qt 6.9에서 도입되었습니다.

Q_CONSTEXPR_DTOR도 참조하십시오 .

[since 6.9] Q_DECL_EQ_DELETE_X(reason)

C++26을 지원하는 컴파일러에서는 __cpp_deleted_function 의 값이 202403L 이상일 때, 이 매크로는 ` = delete(reason) `로 확장됩니다. 그렇지 않은 경우, 이 매크로는 ` = delete`로 확장됩니다.

이 매크로를 사용하여 삭제된 함수를 선언하고, 함수가 사용될 경우 사용자에게 오류 메시지( reason)를 제공하여(함수가 삭제된 이유를 설명하기 위해) 활용할 수 있습니다.

이 매크로는 Qt 6.9에서 도입되었습니다.

Q_DECL_EXPORT

이 매크로는 공유 라이브러리 내보내기를 위해 심볼을 지정합니다( ‘공유 라이브러리 만들기’ 참조).

Q_DECL_IMPORT도 참조하십시오 .

Q_DECL_IMPORT

이 매크로는 특정 심볼을 공유 라이브러리에서 가져온 것으로 선언합니다( ‘공유 라이브러리 생성’ 참조).

Q_DECL_EXPORT도 참조하십시오 .

[since 6.12] Q_DECL_NONALLOCATING_FUNCTION

이 기능을 지원하는 clang 컴파일러에서는 ` [[clang::nonallocating]] `로 확장됩니다.

이 함수는 절대 힙 메모리를 할당하지 않으며 예외를 발생시키지 않음을 선언합니다.

clang의 함수 효과 분석 ( Function Effect Analysis ) 및 실시간 사니타이저(Realtime Sanitizer)에서 사용됩니다.

이 매크로는 Qt 6.12에서 도입되었습니다.

Q_DECL_NONBLOCKING_FUNCTION도 참조하십시오 .

[since 6.12] Q_DECL_NONBLOCKING_FUNCTION

이 기능을 지원하는 clang 컴파일러에서는 ` [[clang::nonblocking]] `로 확장됩니다.

이 함수가 잠금으로 인해 차단되거나, 힙 할당을 수행하거나, 예외를 발생시키지 않음을 선언합니다.

clang의 함수 효과 분석 ( Function Effect Analysis ) 및 실시간 사니타이저(Realtime Sanitizer)에서 사용됩니다.

이 매크로는 Qt 6.12에서 도입되었습니다.

Q_DECL_NONALLOCATING_FUNCTION도 참조하십시오 .

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<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] 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도 참조하십시오 .

[since 6.7] Q_NODISCARD_X(message)

[since 6.7] Q_NODISCARD_CTOR_X(message)

이 기능을 지원하는 컴파일러에서는 [[nodiscard(message)]] 로 확장됩니다.

그렇지 않은 경우 각각 [[nodiscard]] 및 Q_NODISCARD_CTOR 로 확장됩니다.

이 매크로들은 Qt 6.7에서 도입되었습니다.

Q_NODISCARD_CTOR도 참조하십시오 .

Q_UNLIKELY(expr)

컴파일러에게 포함된 조건식 expr 이 false 로 평가될 가능성이 높다는 것을 암시합니다.

이 매크로를 사용하면 컴파일러가 코드를 최적화하는 데 도움이 될 수 있습니다.

예시:

bool readConfiguration(const QFile&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도 참조하십시오 .

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