我注意到在使用m-code
与使用mex-code
时,管理最新答案的方式存在一些差异。这里有一些简单的代码来说明问题:
假设有一个matlab例程:
function [v] = foo()
%[
v = 42.0;
%]
end
如果在matlab上提示一个类型>> foo()
,那么一个获得ans = 42
,如果一个类型>> foo();
没有显示... 到目前为止,那么好 ...
现在假设以下等效例程为mex
函数:
[mfoo.c]
#include "mex.h"
void mexFunction(int nlhs, mxArray* plhs[], int nrhs, const mxArray* prhs[])
{
mexPrintf("There are %d left-hand-side argument(s).\n", nlhs);
if (nrhs > 0) { mexErrMsgTxt("Too many input arguments."); return; }
if (nlhs > 1) { mexErrMsgTxt("Too many ouput arguments."); return; }
if (nlhs == 1) { plhs[0] = mxCreateDoubleScalar(42.0); }
}
matlab上的一个类型是提示>> mfoo()
还是>> mfoo();
,没有区别 ......实际上,在这两种情况下,matlab同样认为nlhs
是0
(请参阅mexPrintf
调试输出)并且ans
值没有显示。
我希望mex-code
的行为与m-code
一样。
到目前为止,我之前删除了测试if (nlhs == 1)
以分配plhs[0]
...并且它有效......但是在所有情况下这样做都是100%安全的;通常nlhs == 0
所以访问plhs[0]
应该没问题,对吧? ......这很奇怪......或许有更安全的方法? ...
答案 0 :(得分:4)
来自http://fr.mathworks.com/help/matlab/matlab_external/data-flow-in-mex-files.html
注意:即使nlhs = 0,也可以返回输出值,这对应于在ans变量中返回结果。