(다른 플랫폼에서) NDEBUG 전처리기 매크로는 무엇에 사용됩니까?
다양한 플랫폼/컴파일러("구현")/프레임워크가 C와 C++ 프리프로세서 매크로에 어떤 목적으로 할당되는지 관심이 있습니다.NDEBUG
.
C와 C++ 표준은 이 정의를 한 번만 언급합니다. 즉, 동작을 제어하는 것입니다.assert()
거시적인
C 또는 C++용 특정 플랫폼/프레임워크/라이브러리가 다음을 사용한다는 것을 알고 있는 특정 답변만 포함할 것을 요청합니다.NDEBUG
표준 정의 매크로 외에 다른 모든 것을 활성화하거나 비활성화할 수 있습니다.
이 질문을 하는 한 가지 이유는 MS(Visual-C++)가 디버그와 릴리스 항목을 구별하기 위해 항상 "그들의" 정의를 사용하기 때문입니다. 저는 이것이 라이브러리/플랫폼이 "자신의" 디버그를 정의하는 일반적인 관행인지 또는 다른 라이브러리/플랫폼이 사용하는지 궁금합니다.NDEBUG
디버그 관련 정보를 제공합니다.
'준인한 '것은 '에 대한한 '것.NDEBUG
그것은 그것이 그것을 통제하는 데 사용된다는 것입니다.assert
매크로는 검사를 수행하거나 수행하지 않는 매크로로 확장됩니다. MSVC는 프로젝트에서 이 매크로를 정의하여 릴리스 빌드 구성에서 유용하게 정의합니다.프로젝트 구성을 편집하여 수동으로 변경할 수 있습니다.다른 툴 체인에서도 비슷한 작업을 수행할 수 있습니다(또는 수행하지 않을 수 있습니다.
로 상를변 있다니습의 .NDEBUG
단위 파일)내를 사용하여 번역합니다.#define
및/는#undef
NDEBUG
그리고 다시 시작합니다.assert.h
방법을 바꾸기 위해assert
매크로가 동작합니다(설정 및 해제).이 동작은 표준에 의해 의무화되며 표준 헤더를 두 번째 포함 후 컴파일 동작을 변경할 수 있도록 표준 헤더를 두 번째 포함하는 것이 허용되는 유일한 시간이라고 생각합니다.
그것은 문제가 되는 프레임워크의 유지 관리자에게 달려 있는 결정입니다.그런 결정들은 바뀔 수 있기 때문에, 당신이 의지할 것이 없습니다.저는 NDEBUG를 디버그와 관련된 모든 것(예: 추적 출력)에 대한 토글로 사용하지만, 다음 릴리스에서는 마음이 바뀔 수도 있습니다.주어진 프로젝트에서 사용하는 프레임워크의 API 문서를 확인하는 것을 대체할 수 있는 답변은 없습니다.
즉, 라이브러리/프레임워크 헤더에서 NDEBUG를 사용하여 다음을 제외한 모든 것을 수행합니다. assert()
다소 멍청한 디자인 결정이 될 것입니다.응용 프로그램 프로그래머는 라이브러리 또는 프레임워크의 헤더를 포함하기 전/후에 적합하다고 판단되는 경우 NDEBUG를 설정/해제할 수 있으므로 lib/framework 유지 관리자는 릴리스 lib로 설정되거나 디버깅 lib로 설정되지 않은 NDEBUG에 의존할 수 없습니다.나는 어떤 중요한 프로젝트도 그런 식으로 엔디버그에 의존했을지 의심스럽습니다.
언급URL : https://stackoverflow.com/questions/5473556/what-is-the-ndebug-preprocessor-macro-used-for-on-different-platforms
'source' 카테고리의 다른 글
기본값을 사용하여 bash에서 변수 읽기 (0) | 2023.06.14 |
---|---|
EPLUS OpenXML 행 수를 가져오는 방법(c#) (0) | 2023.06.14 |
유형 스크립트에서 문자열 변수를 문자열 리터럴 유형으로 캐스트하는 방법 (0) | 2023.06.14 |
연속된 각 시퀀스에 대한 그룹 번호 생성 (0) | 2023.06.14 |
데이터, 방법 및 계산을 글로벌 가치로 만들려면 어떻게 해야 합니까? (0) | 2023.06.14 |