assert()에 대한 콜을 완전히 디세블로 하려면 어떻게 해야 합니까?
내 코드에 콜이 가득하다assert(condition)
사용하고 있는 디버깅버전g++ -g
그게 내 주장을 자극하는 거야예기치 않게, 같은 어설션이, 릴리스 버전에서도 트리거 됩니다.이 어설션은, 다음의 어설션 없이 컴파일 됩니다.-g
선택.
컴파일 시 주장을 완전히 비활성화하려면 어떻게 해야 합니까?명시적으로 정의해야 합니까?NDEBUG
디버깅, 릴리즈, 기타 어떤 것이든 관계없이 생성하는 빌드 중 어느 것이든 상관없습니다.
당신은 해야 한다.#define NDEBUG
(또는 플래그를 사용)-DNDEBUG
g++)를 사용하면 아사트 헤더 파일을 포함하기 전에 정의된 한 아사트가 비활성화됩니다.
사용하다#define NDEBUG
7.2 진단
1 헤더는 아사트 매크로를 정의하고 다른 매크로를 참조한다.
NDEBUG
에 의해 정의되지 않는
<assert.h>
NDEBUG가 포함된 소스 파일의 지점에서 매크로 이름으로 정의되는 경우, 아사트 매크로는 단순하게 다음과 같이 정의됩니다.
#define assert(ignore) ((void)0)
Assert 매크로는 NDEBUG의 현재 상태에 따라 다음과 같이 매번 재배치됩니다.
<assert.h>
포함되어 있습니다.
그-g
플래그는 동작에 영향을 주지 않습니다.assert
다양한 디버깅 기호를 사용할 수 있도록 합니다.
설정NDEBUG
는 (공식 ISO 표준과 같이) 어설션을 비활성화하는 표준 방법입니다.
네, 정의하겠습니다.NDEBUG
명령줄/빌드 시스템 상에서 프리프로세서/프로세서 옵션을 사용하여-DNDEBUG
.
이는 에 의해 삽입된 디버깅 정보와는 무관합니다.-g
.
어설션을 완전히 디세블로 할 수 있습니다.
#define NDEBUG
#include <assert.h>
또는 프로덕션 버전인지 개발 버전인지에 따라 makefile/build 절차에서 NDEBUG(-DNDEBUG 경유)를 설정할 수 있습니다.
언급URL : https://stackoverflow.com/questions/5354314/how-can-i-completely-disable-calls-to-assert
'programing' 카테고리의 다른 글
printStackTrace를 문자열에 저장하는 방법 (0) | 2022.07.20 |
---|---|
버튼이나 링크 없이 페이지 로드 시 Bootstrap-vue 모드를 트리거하려면 어떻게 해야 합니까? (0) | 2022.07.20 |
Vuex 스토어의 돌연변이 중 하나에서 커밋을 호출할 수 있습니까? (0) | 2022.07.20 |
유틸리티 클래스 설정 및 vue 구성 요소 내에서 사용 (0) | 2022.07.20 |
엄격한 에일리어스 규칙이 뭐죠? (0) | 2022.07.20 |