私はPythonクラスをC言語で書いています。私はデバッグコードにアサーションを入れたいと思います。 assert.h
私はうまく合わせます。これはデバッグコンパイルの中に置かれるだけなので、アサーションの失敗がPythonコード*のユーザに影響することはありません。Python Cコードからどのようにアサートできますか?
私は他のCコードから使用できるように私の 'ライブラリ'コード(Pythonにリンクされたコードとは別にすべきです)を分割しようとしています。私のPythonメソッドは、私の純粋なCコードの周りに薄いラッパーです。
だから、私は「ライブラリ」のコードでこれを行うことはできません。
if (black == white)
{
PyErr_SetString(PyExc_RuntimeError, "Remap failed");
}
これは、Pythonと私の純粋なCのコードを汚染するので。また、私はDistutilsのコンパイラは、常に私はデバッグビルドにおいてもassert.h
を使用することはできませんを意味し、NDEBUG
を設定することを信じて、簡単な
assert(black != white);
よりもはるかに醜いです。
Mac OSとLinux。
ヘルプ!
*私はPythonから呼び出されたCコードでアサートすることに関して聞いた1つの議論です。
これは私が聞きたいものです!だから、 'python setup.py build'や' python setup.py build --debug'を実行すると、 'gcc-4.2 -fno-strict-aliasing -fno-common -dynamic -arch i386 -arch x86_64 -g -O2 -DNDEBUG -g -O3 -g -UDEBUG -I /ライブラリ/フレームワーク/ Python.framework/Versions/2.7/include/python2.7 -c thing.c -o build/temp.macosx-10.6-intel -2.7/thing.o'。どうすればNDEBUGを削除できますか? – Joe
@ジョー:そうです。私の編集を参照してください。 –
それは本当に問題を解決しません。すべてのケースでアサートを有効にする場合は、すべてのユーザーにカスタムビルドコマンドを使用するように指示するのは良い解決策ではありません。これは何らかの形で 'setup.py'でクリーンな方法で修正する必要があります。 – Albert