program tip

어설 션을 완전히 비활성화하는 방법

radiobox 2020. 11. 4. 07:51
반응형

어설 션을 완전히 비활성화하는 방법


내 코드가 assert(condition). 디버그 버전에서는 g++ -g내 주장을 악용합니다. 놀랍게도 -g옵션 없이 컴파일 된 릴리스 버전에서도 어설 션이 작동하는 것을 볼 수 있습니다 .

컴파일 타임에 내 주장을 완전히 비활성화하려면 어떻게해야합니까? NDEBUG디버그, 릴리스 또는 기타 모든 빌드에도 명시 적으로 정의해야합니까 ?


반드시 #define NDEBUG(또는 g ++-DNDEBUG 와 함께 플래그 사용 ) 이것은 assert 헤더 파일을 포함하기 전에 정의되어있는 한 assert를 비활성화합니다.


사용하다 #define NDEBUG

7.2 진단

1 헤더는 assert 매크로를 정의하고 다른 매크로를 참조합니다.

NDEBUG

에 의해 정의되지 않습니다 <assert.h>. 경우 NDEBUG가 소스의 지점에서 매크로 이름으로 네드 드 파이는 파이 르에 포함되는 경우, 어설 션 매크로는 단순히 네드 드 파이입니다

#define assert(ignore) ((void)0)

어설 션 매크로의 현재 상태에 따라 네드 충고가 fi NDEBUG 마다 <assert.h>포함된다.


다음 방법으로 어설 션을 완전히 비활성화 할 수 있습니다

#define NDEBUG
#include <assert.h>

또는 생산 버전 또는 개발 버전을 원하는지 여부에 따라 makefile / 빌드 절차에서 NDEBUG (-DNDEBUG를 통해)를 설정할 수 있습니다.


-g플래그의 작동에는 영향을 미치지 않습니다 assert단지 다양한 디버깅 심볼을 사용할 수 있는지 확인합니다.

설정 NDEBUG은 어설 션을 비활성화하는 표준 (공식, ISO 표준에서와 같이) 방법입니다.


예, NDEBUG전 처리기 / 컴파일러 옵션을 사용하여 명령 줄 / 빌드 시스템 에서 정의 합니다 -DNDEBUG.

에서 삽입 한 디버깅 정보와는 아무 관련이 없습니다 -g.

참고 URL : https://stackoverflow.com/questions/5354314/how-to-completely-disable-assertion

반응형