c/c++语言开发共享我怎样才能从Python C代码断言?

我正在用C编写Python类,我想在我的调试代码中加入断言。 assert.h适合我。 这只会放入调试编译中,因此不会有断言失败影响Python代码的用户*。

我试图划分我的’库’代码(它应该与链接到Python的代码分开),所以我可以从其他C代码中使用它。 因此,我的Python方法是我的纯C代码的简洁包装。

所以我不能在我的’库’代码中执行此操作:

 if (black == white) { PyErr_SetString(PyExc_RuntimeError, "Remap failed"); } 

因为这会使用Python污染我的纯C代码。 它也比简单的更丑陋

 assert(black != white); 

我相信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 

    为不同的情况创建自己的宏,例如myassert() 。 或者创建一个宏,它检查一个全局变量以查看宏是用于Python代码还是“普通”C. Python模块入口点必须将此变量设置为true,或者您可以使用函数指针,一个用于Python代码,C代码的另一个默认代码。

    setup.py取消定义NDEBUG宏:

     ext_modules = [Extension( ... undef_macros=['NDEBUG'], )] 

    这将导致命令行

     gcc ... -DNDEBUG ... -UNDEBUG ... 

    哪个(虽然丑陋)做正确的事情,即它保持启用断言。

      以上就是c/c++开发分享我怎样才能从Python C代码断言?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/545807.html

      (0)
      上一篇 2021年1月10日
      下一篇 2021年1月10日

      精彩推荐