다음 코드는있는 무슨 수 있습니다 : 한편
>>> import sysconfig
>>> sysconfig.get_config_var('Py_DEBUG')
0
python3.4-dbg
를 사용하여 :
>>> import sysconfig
>>> sysconfig.get_config_var('Py_DEBUG')
1
을하지만,도 컴파일된다 NDEBUG
menti와 같은 "디버그"동작을 제어하는 시간 옵션 oned 여기 : http://bugs.python.org/issue17411.
다른 말로하면 : Py_DEBUG
이 설정되지 않았을 수도 있지만 (NDEBUG
에 의해 제어되는 C 코드 어설 션은 여전히 파이썬의 동작을 변경시킬 수 있습니다. Py_DEBUG
을 설정하면 항상 NDEBUG
이 해제되어 어설 션이 적용됩니다. Py_DEBUG
의 부족은 NDEBUG
에 영향을 미치지 않습니다. 정의되어 있거나 정의되지 않았을 수 있습니다. NDEBUG
이 정의되면 어설 션은 void 매크로로 정의됩니다. http://en.wikipedia.org/wiki/Assert.h에서
:
이 그냥 소스 코드를 변경하지 않고 프로그램을 재 컴파일하여 주장을 제거 할 수
프로그래머
: 매크로 NDEBUG가 어설의 포함 전에 정의 경우() 매크로 입니다 정의 단순히 :
#define assert(ignore)((void) 0)
가능한하지만, 인자를 취하지 솔루션은 컴파일러 명령 줄 0,123,827을 확인하는 것입니다 이것에 대한는 : OPT
예를
>>> sysconfig.get_config_var('OPT')
'-DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes'
와우이 될 수
, 알고하지 않았다. +1 – vaultah
이것이 내가 C 주장을 싫어하는 이유 중 하나입니다. 누군가가 잘못 될 수 있다는 것을 알고 있지만, 처리하기보다는 처리하기 위해 디버그 빌드에서 ** 단지 물건을 지옥으로 보낼 수 있습니다. 코드 예 - * (호언 장담, 비장 발사)! * –
이식 할 수 없지만 적어도 실제 운영체제에서 작동하며 sysconfig의 Py_DEBUG와 NDEBUG 또는 그 의미에 대해 몰랐습니다. 감사합니다. –