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 文件来执行类似的操作,而无需重新编译verbosemex 文件。if但是,如果您过于频繁地执行该语句,这仍然会对性能产生一些影响。所以去争取DEBUG更多 - 这是做这件事的标准方法。

于 2012-10-18T15:10:35.923 回答