어설는 언어에 내장되어 <cassert>
또는 static_assert
에서 assert
중 하나를 사용하여 수행 할 수 있습니다.
그래서 시간을 수동으로 가져 와서 assert
문에서 시차를 확인해 보는 것이 어떻습니까?
#include <cassert>
#include <chrono>
#ifndef NDEBUG
auto start = std::chrono::high_resolution_clock::now();
#endif
...
#ifndef NDEBUG
assert(std::chrono::duration_cast<milliseconds>(
std::chrono::high_resolution_clock::now() - start).count() < 2000
);
#endif
전처리 지시어
는
NDEBUG
가 정의되어있는 경우 코드는 컴파일러에 통과 할 수 있습니다.
assert
은
NDEBUG
도 정의되어 있고 다른 하나가없는 경우에는 제대로 작동하지 않는 경우에만 조치를 취합니다.
NDEBUG
이
start
식별자로 정의 될 때
당신은 식별자 고유하게 (특정 컴파일러) 또는 별도의 범위로 전체를 이동
__COUNTER__
일부 GCC-마법을 할 수있는, 이름 충돌을 방지하기 위해. 당신에게는 문제가되지 않을 수도 있지만, 어떤 사람들은 프로그램을 특정 관점에서 바라 보면 조건부 정의 변수에 놀라는 경우가 있습니다.
음, 타이머를 시작한 다음 합계가 제한보다 적은 정상적인 어설 션을 사용할 수 있습니다. – BoBTFish
'assert'는 전형적인 릴리즈 빌드 ('NDEBUG'가 정의되었을 때)에서 아무것도하지 않는 * 매크로 *입니다. –
언어 또는 표준 라이브러리에 있지 않습니다. 즉, (거의) 사소한 것입니다. – utnapistim