많은 주장이있는 라이브러리를 작성하고 있습니다. assert가 켜져 있으면 라이브러리의 속도가 훨씬 느려지고 라이브러리의 전체적인 점이 빠르기 때문에 버그를 테스트하거나 진단 할 때만 assert가 의미가 있습니다. 나는 autoconf를 사용하고 있으며 사용자가이 문제에 대해 알도록 요구하고 어설 션을 비활성화하도록 구성하는 플래그를 전달하는 것이 표준 연습 인 것으로 보입니다. 이 경우 전문가 만이 적절한 버전의 라이브러리를 설치할 수 있습니다! 그게 내가해야할 일이고, 그렇다면 "전문가 사용자와 다른 프로그래머가 기대하는 것"이상의 그럴만한 이유가 있습니까?라이브러리 빌드 시스템에서 기본적으로 어설 션을 해제해야합니까?
편집 :Here's 다른 이유는 그렇게하는 놀라운 주어진하지만 당신이 릴리스 모드에서 기본적으로 NDEBUG를 정의하지해야한다는 논의의 예.
어설 션으로 디버그하고 어설 션없이 최적화 된 릴리스의 두 가지 라이브러리 버전을 빌드해야합니다. 또한 릴리스 빌드에 * 값싼 주장을 남기는 것을 고려하십시오 (성능에 영향을주지 않으면 측정!) –
@dribeas 그게 좋은 생각입니다. (http://stackoverflow.com/questions/11695046/how-to-have-library- asserts-on-off-side-by-side), 적어도 유닉스 플랫폼에서는 비표준적인 것처럼 보인다. 특수 수정자를 추가하지 않은 라이브러리가 이름에 추가 된 것이 어설 션 또는 비 어설 션이어야하는 경우 여전히 문제가됩니다. 또한 사용자가 두 가지 버전을 묻지 않으면 기본적으로 어설 션 여부를 결정해야합니다. 나는 그 주장이 그들에게 요구하는 사람들에게만 있어야한다고 말하고 싶지만, 그것은 표준적인 실행에 반하는 것처럼 보이며, 나는 그것이 왜 그렇게 궁금합니다. –
@ DavidRodríguez-dribeas 아, 잠깐, 나는 당신이 "주장과 함께 디버그"라고 말하지 않았다. 이 질문은 디버그 빌드에 관한 것이 아닙니다. 그것은 소스에서 빌드하고 "make install"과 같은 일을 할 때 설치되는 기본 릴리즈 버전에 관한 것입니다. –