Joe*_*Joe 7 c python distutils python-c-api python-c-extension
我正在用C编写一个Python类,我想在我的调试代码中加入断言.assert.h很适合我.这只会被放入调试编译中,因此不会出现影响Python代码*用户的断言失败的可能性.
我试图划分我的'库'代码(它应该与链接到Python的代码分开),所以我可以从其他C代码中使用它.因此,我的Python方法是我的纯C代码的薄包装.
所以我不能在我的'库'代码中执行此操作:
if (black == white)
{
PyErr_SetString(PyExc_RuntimeError, "Remap failed");
}
Run Code Online (Sandbox Code Playgroud)
因为这会用Python污染我的纯C代码.它也比简单的更丑陋
assert(black != white);
Run Code Online (Sandbox Code Playgroud)
我相信Distutils编译器总是设置NDEBUG,这意味着我assert.h甚至不能在调试版本中使用.
Mac OS和Linux.
救命!
*我听过一个论点反对在Python中调用C代码断言.
只是用assert.h.这是一个神话,distutils总是定义NDEBUG; 它只适用于Windows上的Microsoft的msvc,然后才从Python发布版本(而不是Python调试版本)调用.
然后,在您自己的发布版本中定义NDEBUG,将-D命令行选项传递给setup.py build_ext.
编辑:似乎NDEBUG默认是通过Python的Makefile的OPT设置定义的.要重置此功能,请运行
OPT="-g -O3" python setup.py build
Run Code Online (Sandbox Code Playgroud)