어설 션을 완전히 비활성화하는 방법
내 코드가 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
'program tip' 카테고리의 다른 글
php artisan migrate : make create_mytable 실패 : "migrate : make"가 정의되지 않았습니다. (0) | 2020.11.04 |
---|---|
String.format ()에 대한 Java의 % ld에 해당하는 C ++ (0) | 2020.11.04 |
Magento 결제 흐름 (0) | 2020.11.04 |
교리 2에서 엔티티를 다른 행으로 다시 저장하는 방법 (0) | 2020.11.04 |
NGINX gzip이 JavaScript 파일을 압축하지 않음 (0) | 2020.11.04 |