_DEBUG vs NDEBUG
코드의 디버깅섹션을 지정하기 위해 사용하는 프리프로세서 정의는 무엇입니까?
사용하다#ifdef _DEBUG
또는#ifndef NDEBUG
아니면 더 나은 방법이 있을까요?#define MY_DEBUG
?
생각합니다_DEBUG
Visual Studio는 고유하며 NDEBUG는 표준입니까?
NDEBUG는 표준입니까?
네, C89, C99, C++98, C++2003, C++2011, C++2014 표준에 대해 의미론적인 "디버깅 안 함"을 가진 표준 매크로입니다.없다_DEBUG
매크로를 참조해 주세요.
C++2003 표준은 "17.4.2.1 헤더"의 "페이지 326"에 있는 판독기를 표준 C로 전송합니다.
이 NDEBUG는 Standard C 라이브러리와 동일합니다.
C89(C 프로그래머는 이 표준을 표준 C라고 부른다)에서 "4.2 Diagnostics" 섹션은 다음과 같이 기술되어 있습니다.
http://port70.net/~nsz/c/c89/c89-blash.dlash
NDEBUG가 가 포함된 소스 파일의 포인트에서 매크로 이름으로 정의되어 있는 경우 아사트 매크로는 다음과 같이 단순하게 정의됩니다.
#define assert(ignore) ((void)0)
의 의미를 보면_DEBUG
Visual Studio https://msdn.microsoft.com/en-us/library/b0084kay.aspx에서 매크로를 실행하면 이 매크로는 언어 런타임 라이브러리 버전에 의해 자동으로 정의됩니다.
Visual Studio 정의_DEBUG
를 지정했을 경우/MTd
또는/MDd
선택,NDEBUG
표준 C 어사션을 디세블로 합니다.필요에 따라 사용하십시오._DEBUG
디버깅 코드가 MS CRT 디버깅 기술과 일치하도록 하고 싶은 경우NDEBUG
일관성을 유지하려면assert()
.
독자적인 디버깅 매크로를 정의하는 경우(또한 컴파일러나 C 런타임도 해킹하지 않는 경우), 이름은 예약되어 있으므로 밑줄로 시작하지 마십시오.
나는 의지한다NDEBUG
컴파일러와 구현 전체에서 동작이 표준화된 유일한 소프트웨어이기 때문입니다(표준 아사트 매크로에 대해서는 설명서를 참조).부정적인 논리는 작은 읽기 쉬운 속도 번프이지만, 이것은 여러분이 빨리 적응할 수 있는 흔한 관용어입니다.
의지하다_DEBUG
특정 컴파일러 및 라이브러리 구현의 세부 구현에 의존합니다.다른 컴파일러도 같은 규칙을 선택할 수 있습니다.
세 번째 옵션은 프로젝트의 매크로를 정의하는 것입니다.이것은 매우 합리적입니다.독자적인 매크로를 가지는 것으로, 실장간에 이식성을 얻을 수 있어 디버깅코드를 어설션과는 무관하게 유효 또는 무효로 할 수 있습니다.다만, 일반적으로 컴파일시에 유효하게 되어 있는 디버깅 정보의 클래스가 다른 것은 권장하지 않습니다.이것에 의해, 거의 메리트를 얻기 위해서 빌드(및 테스트)할 필요가 있는 설정의 수가 증가하기 때문입니다.
이러한 옵션 중 하나를 사용하여 프로젝트의 일부로 서드파티 코드를 사용하는 경우 어떤 규칙을 사용하는지 알아야 합니다.
「」NDEBUG
「」의 유무를 합니다.assert()
활성화 여부를 지정합니다.
에는 다른에 저는 디버깅 이외의 .따라서NDEBUG
이치노사용하는 방법은 사용하는 프레임워크에 따라 다릅니다.시스템에 따라 활성화 매크로가 다르며, 필요한 것은 무엇이든 사용합니다.
프레임워크가 없는 경우, 선두에 밑줄 없이 이름을 사용합니다.이러한 이름은 '실장'을 위해 예약되어 있기 때문에 이름이 매크로일 경우 중복되는 문제를 피하려고 합니다.
도 ★★★★★★★★★★★★★★★.DEBUG
빌드에는 .예를 들어 RELEASE 빌드에는 항상 pdb 파일을 생성하고 저장하는 것이 좋습니다. 말은 '어느쪽인가'라는 이죠.-Zx
및 "flags "flags",-DEBUG
커옵옵 、 while는 、 는는안에에_DEBUG
를 들어, 「」에의 콜 등입니다.malloc
★★★★★★★★★★★★★★★★★」free
.그리고나서NDEBUG
는 어설션을 무효로 합니다.
일관성을 가지면 어느 것이든 상관없다.또한 어떤 이유로 다른 프로그램 또는 툴과 상호 운용해야 할 경우 특정 DEBUG 식별자를 사용하여 쉽게 조작할 수 있습니다.
#ifdef THEIRDEBUG
#define MYDEBUG
#endif //and vice-versa
언급URL : https://stackoverflow.com/questions/2290509/debug-vs-ndebug
'programing' 카테고리의 다른 글
VUEX의 변환으로 특정 상태 변환 (0) | 2022.07.10 |
---|---|
C에서 선언된 미초기화 변수는 어떻게 됩니까?가치가 있나요? (0) | 2022.07.08 |
vue 컴포넌트에 html 전달 (0) | 2022.07.08 |
Vue 라우터가 vue CLI 빌드에서 작동하지 않음 (0) | 2022.07.08 |
Java 8 속성별 구별 (0) | 2022.07.08 |