0

matlab スクリプトから呼び出す mex コードがあります。コードをデバッグするために、多くの mexPrintf ステートメントを配置しましたが、タイミングの目的で、mex コード呼び出しで I/O を実行したくありません (I/O には多くの時間がかかるため)。これらのステートメントを削除/コメントアウトすることなく、これらのステートメントがまったく実行されないように、コード内の mexPrintf 呼び出しを抑制する最も簡単で最良の方法は何ですか? (後でこれらのデバッグ ステートメントが必要になる可能性があるため、これらのステートメントを削除/コメント アウトして、mex コードを再コンパイルしたくありません。また、コードを何度も変更してビルドするこの反復を続けたくありません) .

トリックを実行できるコンパイラスイッチはありますか? またはいくつかのプリプロセッサステートメント?

ありがとう!

4

1 に答える 1

4

mexPrintfオフにすることはできません。コードを変更する必要があります。DEBUGたとえば、いつ印刷するか、いつ印刷しないかを決定するフラグを定義します。たとえば、通常のprintf機能では

#include <stdio.h>
#include <stdlib.h>

//#define DEBUG
#ifdef DEBUG
#define MPRINT(...) printf(__VA_ARGS__);
#else
#define MPRINT(...)
#endif

int main()
{
  MPRINT("%d\n", 5);
}

今実行しても何も出力されません。#define DEBUGしかし、ステートメントのコメントを外すと、 5 が出力されます。

mexPrintfまたは、そのような句ですべての呼び出しを受け入れることができます。

#ifdef DEBUG
mexPrintf(...);
#endif

DEBUGここでも、が定義されていない場合は何も出力されません。しかし、それははるかに多くの作業です。

ifまた、通常のステートメントを使用して mex ファイルを再コンパイルせずに同様のことを行い、verboseパラメーターを mex ファイルに渡すこともできます。ifただし、ステートメントを頻繁に実行しすぎると、パフォーマンスに影響を与えます。ですから、DEBUGもっと多くのことを行ってください。これが標準的な方法です。

于 2012-10-18T15:10:35.923 に答える