<QtAssert> 프록시 페이지

함수

T *q_check_ptr(T *p)

매크로

void Q_ASSERT(bool test)
void Q_ASSERT_X(bool test, const char *where, const char *what)
void Q_CHECK_PTR(void *pointer)
void Q_UNREACHABLE
(since 6.5) void Q_UNREACHABLE_RETURN(...)

함수 문서

template <typename T> T *q_check_ptr(T *p)

p 에서 Q_CHECK_PTR 을 사용한 다음 p 을 반환합니다.

Q_CHECK_PTR 의 인라인 버전으로 사용할 수 있습니다.

매크로 문서

void Q_ASSERT(bool test)

testfalse 인 경우 소스 코드 파일 이름과 줄 번호가 포함된 경고 메시지를 출력합니다.

Q_ASSERT()는 개발 중 사전 및 사후 조건을 테스트하는 데 유용합니다. 컴파일 중에 QT_NO_DEBUG 이 정의된 경우 아무 작업도 수행하지 않습니다.

예시:

// File: div.cpp

#include <QtGlobal>

int divide(int a, int b)
{
    Q_ASSERT(b != 0);
    return a / b;
}

b 가 0이면 Q_ASSERT 문은 qFatal() 함수를 사용하여 다음 메시지를 출력합니다:

ASSERT: "b != 0" in file div.cpp, line 7

Q_ASSERT_X(), qFatal() 및 디버깅 기법도참조하세요 .

void Q_ASSERT_X(bool test, const char *where, const char *what)

where, testfalse 인 경우 소스 파일 이름 및 줄 번호와 함께 what 메시지를 출력합니다.

Q_ASSERT_X는 개발 중 사전 및 사후 조건을 테스트하는 데 유용합니다. 컴파일 중에 QT_NO_DEBUG 이 정의된 경우 아무 작업도 수행하지 않습니다.

예시:

// File: div.cpp

#include <QtGlobal>

int divide(int a, int b)
{
    Q_ASSERT_X(b != 0, "divide", "division by zero");
    return a / b;
}

b 가 0이면 Q_ASSERT_X 문은 qFatal() 함수를 사용하여 다음 메시지를 출력합니다:

ASSERT failure in divide: "division by zero", file div.cpp, line 7

Q_ASSERT(), qFatal() 및 디버깅 기법도참조하세요 .

void Q_CHECK_PTR(void *pointer)

pointernullptr 인 경우 소스 코드의 파일 이름과 줄 번호가 포함된 메시지를 출력하여 프로그램이 메모리가 부족하다는 메시지를 표시하고 프로그램 실행을 중단합니다. 예외가 활성화된 경우 std::bad_alloc 를 대신 출력합니다.

컴파일 중에 QT_NO_DEBUGQT_NO_EXCEPTIONS 이 정의된 경우 Q_CHECK_PTR은 아무 작업도 수행하지 않습니다. 따라서 경우에 따라 검사가 비활성화될 수 있으므로 메모리 할당 성공 여부를 확인하는 데 Q_CHECK_PTR을 사용해서는 안 됩니다.

예시:

int *a;

Q_CHECK_PTR(a = new int[80]);   // WRONG!

a = new (nothrow) int[80];      // Right
Q_CHECK_PTR(a);

qWarning() 및 디버깅 기법도참조하세요 .

void Q_UNREACHABLE

컴파일러에 현재 지점에 어떤 실행으로도 도달할 수 없음을 알려주므로 여기서 이어지는 코드 경로와 여기에서 계속되는 코드를 데드 코드로 최적화할 수 있습니다.

이 매크로는 불가능한 조건을 표시하는 데 유용합니다. 예를 들어 다음 열거형이 있다고 가정해 보겠습니다:

   enum Shapes {
       Rectangle,
       Triangle,
       Circle,
       NumShapes
   };

다음과 같이 스위치 테이블을 작성할 수 있습니다:

   switch (shape) {
       case Rectangle:
           return rectangle();
       case Triangle:
           return triangle();
       case Circle:
           return circle();
       case NumShapes:
           Q_UNREACHABLE();
           break;
   }

이 때 Q_UNREACHABLE()을 삽입하면 컴파일러가 해당 값을 포함하는 모양 변수에 대한 코드를 생성하지 않도록 지시한다는 이점이 있습니다. 매크로가 누락된 경우에도 컴파일러는 해당 값에 대해 필요한 비교를 생성합니다. 대소문자 레이블이 제거된 경우 일부 컴파일러에서는 일부 열거형 값이 확인되지 않았다는 경고를 표시할 수 있습니다.

불가능한 조건에서 이 매크로를 사용하면 죽은 코드 경로를 제거할 수 있으므로 코드 커버리지가 향상될 수 있습니다.

디버그 빌드에서는 디버깅을 용이하게 하기 위해 어설션에 의해 조건이 적용됩니다.

참고: 매크로 Q_UNREACHABLE_RETURN()를 사용하면 컴파일러에 필요한 반환 문을 삽입할 때 컴파일러가 매크로의 존재에 대해 불만을 제기하지 않고 경고를 표시하지 않습니다.

Q_ASSERT(), qFatal() 및 Q_UNREACHABLE_RETURN()도 참조하세요 .

[since 6.5] void Q_UNREACHABLE_RETURN(...)

이것은

Q_UNREACHABLE();
return __VA_ARGS__;

와 동일하지만 컴파일러에서 경고하는 리턴이 생략됩니다.

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

Q_UNREACHABLE()도 참조하십시오 .

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