У меня есть мекс-код, который я вызываю из своих скриптов matlab. Для отладки кода я поместил много операторов mexPrintf, но теперь для целей синхронизации я не хочу, чтобы во время вызова mex-кода происходил какой-либо ввод-вывод (так как ввод-вывод занимает много времени). Какой самый простой и лучший способ подавить вызовы mexPrintf в моем коде, чтобы эти операторы вообще не выполнялись без необходимости удалять / комментировать эти операторы? (Я не хочу удалять / комментировать эти операторы и перекомпилировать мой mex-код, потому что мне могут понадобиться эти отладочные операторы позже, и я не хочу продолжать проходить эту итерацию изменения и построения моего кода снова и снова) ,
Есть ли переключатель компилятора, который может сделать свое дело? или какое-то препроцессорное утверждение?
Спасибо!
Вы не можете включить 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
больше — это стандартный способ сделать это.
Других решений пока нет …