assert
|
헤더 파일에 정의됨
<assert.h>
|
||
|
#ifdef NDEBUG
#define assert(condition) ((void)0)
|
(C23 이전) | |
|
#ifdef NDEBUG
#define assert(...) ((void)0)
|
(C23 이후) | |
매크로
assert
의 정의는 표준 라이브러리에서 정의하지 않는 또 다른 매크로,
NDEBUG
에 따라 달라집니다.
만약
NDEBUG
가 소스 코드에서
<assert.h>
가 포함되는 지점에서 매크로 이름으로 정의되어 있다면,
assert
는 아무 동작도 수행하지 않습니다.
만약
NDEBUG
가 정의되지 않았다면,
assert
는
인자
(C23까지)
__VA_ARGS__
로부터 합성된 표현식
(C23부터)
(스칼라 타입을 가져야 하며, 그렇지 않으면 동작이 정의되지 않음)이 0과 같은지 비교합니다. 만약 0과 같다면,
assert
는 표준 오류 출력에 구현체 정의 진단 정보를 출력하고
abort
(
)
를 호출합니다. 진단 정보는
expression
의 텍스트와
미리 정의된 변수
__func__
및
(C99부터)
미리 정의된 매크로
__FILE__
와
__LINE__
의 값을 포함해야 합니다.
목차 |
매개변수
| 조건 | - | 스칼라 타입의 표현식 |
반환값
(없음)
참고 사항
assert
오류에 추가 메시지를 포함하기 위한 표준화된 인터페이스는 존재하지 않습니다. 이식 가능한 방법으로는
콤마 연산자
를 사용하거나, 문자열 리터럴과 함께
&&
를 사용하는 것이 있습니다:
assert(("빛이 다섯 개 있습니다", 2 + 2 == 5)); assert(2 + 2 == 5 && "빛이 다섯 개 있습니다");
Microsoft CRT
의
assert
구현은 기본 함수(
_wassert
)가
__func__
또는 이에 상응하는 대체자를 전혀 받지 않기 때문에 C99 및 이후 개정판을 준수하지 않습니다.
C23에서의
assert
변경 사항(
N2829
)이 공식 결함 보고서는 아니지만, C 위원회는
구현체들이 이 변경 사항을 이전 모드로 백포트할 것을 권장합니다
.
예제
가능한 출력:
--- Output with NDEBUG not defined: --- a.out: main.cpp:10: main: Assertion `x >= 0.0' failed. --- Output with NDEBUG defined: --- sqrt(x) = -nan
참고문헌
- C23 표준 (ISO/IEC 9899:2024):
-
- 7.2.2.1 assert 매크로 (p: 196)
- C17 표준 (ISO/IEC 9899:2018):
-
- 7.2.1.1 assert 매크로 (p: 135)
- C11 표준 (ISO/IEC 9899:2011):
-
- 7.2.1.1 assert 매크로 (p: 186-187)
- C99 표준 (ISO/IEC 9899:1999):
-
- 7.2.1.1 assert 매크로 (p: 169)
- C89/C90 표준 (ISO/IEC 9899:1990):
-
- 4.2.1.1 assert 매크로
참고 항목
|
비정상적인 프로그램 종료를 유발합니다 (정리 작업 없이)
(함수) |
|
|
C++ documentation
for
assert
|
|