Как заставить printf работать, когда он находится в отдельном файле c, который вызывается из s-функции?

#matlab #printf #simulink #mex

#matlab #printf #simulink #mex

Вопрос:

У меня есть s-функция в файле mySFun.c, которая вызывает функцию foo (), которая реализована в отдельном файле myFoo.c. Когда я пишу инструкции printf внутри функции mdlOutput в mySFun.c, они работают нормально. Но когда я помещаю printf внутри функции foo() в myFoo.c, они не отображают свои выходные данные в окне командной строки.

Как я могу включить функциональность printf, когда printf находится внутри другого файла, который вызывается из s-функции?

Ответ №1:

Единственный официальный способ записи в консоль MATLAB из MEX-функции — это через функцию mexPrintf. Однако заголовочный файл mex.h содержит эту строку:

 #define printf mexPrintf
  

И simstruct.h включает mex.h. Я подозреваю, что вы включаете simstruct.h из mySFun.c, но не из myFoo.c. Вы можете либо включить simstruct.h или mex.h также в другие ваши исходные файлы (чтобы подобрать там #define), либо переключиться на прямой вызов mexPrintf.

Комментарии:

1. Это правильно! Поскольку я также должен иметь возможность использовать myFoo.c в отдельном проекте C (где simstruct.h недоступен) Я должен сделать это следующим образом: #ifdef MATLAB_MEX_FILE включает simstruct.h #endif

Ответ №2:

printf — это файл библиотеки C, и поэтому вам не нужно создавать свой :). вместо этого вы должны вставить myFoo .h в файле mySFun.h, если вы будете вызывать его функцию foo().

Комментарии:

1. К сожалению, я не могу этого сделать, потому что алгоритм должен находиться в отдельном файле c (не файле заголовка) из-за других ограничений.