подавление mexPrintf в mex-коде matlab

У меня есть мекс-код, который я вызываю из своих скриптов matlab. Для отладки кода я поместил много операторов mexPrintf, но теперь для целей синхронизации я не хочу, чтобы во время вызова mex-кода происходил какой-либо ввод-вывод (так как ввод-вывод занимает много времени). Какой самый простой и лучший способ подавить вызовы mexPrintf в моем коде, чтобы эти операторы вообще не выполнялись без необходимости удалять / комментировать эти операторы? (Я не хочу удалять / комментировать эти операторы и перекомпилировать мой mex-код, потому что мне могут понадобиться эти отладочные операторы позже, и я не хочу продолжать проходить эту итерацию изменения и построения моего кода снова и снова) ,

Есть ли переключатель компилятора, который может сделать свое дело? или какое-то препроцессорное утверждение?

Спасибо!

0

Решение

Вы не можете включить 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 не определено. Но это гораздо больше работы.

Вы также можете сделать то же самое, не перекомпилировав ваш mex файл, используя обычный if Заявление и передать verbose параметр в мекс файл. Тем не менее, это все равно будет иметь некоторое влияние на производительность, если вы выполните if утверждение слишком часто. Так что идти на DEBUG больше — это стандартный способ сделать это.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]