2014-11-02 6 views
2

현재 C89로 작성한 프로젝트 중 하나에서 미리 정의 된 가정이있을 때 코드가 내 개발 시스템에서 실패하는 방법으로 assert() 문을 사용했습니다. 사실을 말하지 마라. 그러나 프로덕션 환경에서 어설 션 오류가 발생해도 프로그램이 중단되지 않도록 코드에 오류 처리 코드가 포함되어 있습니다.C : 프로덕트 코드에서 assert를 제거합니다.

프로젝트는 GNU Autotools를 사용하여 소스 배포를 컴파일하고 배포합니다.

지금, 제 질문은 make dist을 실행하면 코드에서 모든 주장을 제거한 다음 배포 용 타볼을 어떻게 생성합니까? 위키 백과에 assert.h에서

+2

이 컴파일러를 사용할 수 : 매크로는 단순히 을 정의 NDEBUG를 정의하기 위해'-DNDEBUG = 1 '플래그를 붙인다. – P0W

답변

5

:

단지 소스 코드를 변경하지 않고 프로그램을 재 컴파일하여 주장을 제거 할 수

프로그래머 : 매크로 NDEBUG가 <assert.h>의 포함 전에 정의 경우, 어설 션()

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

+0

이것이 핵심 정보이지만, 추가 정보가 필요하다. - make dist에 대한 컴파일이 NDEBUG를 어떻게 보장하는지, 그리고 모든 코드는 assertions가 활성화되지 않은 상태에서 다시 빌드됩니다. –

+1

"어떻게 makefiles를 GNU Autotools에서 편집 할 것"은 다른 주제가 될 것이라고 생각했을 것입니다. 컴파일러 플래그를 GNU Autotools에 추가하는 방법 – Eric