我是否可以从mex文件返回一个值,即使nlhs == 0与m文件行为一致?

时间:2015-07-17 14:54:34

标签: matlab mex

我注意到在使用m-code与使用mex-code时,管理最新答案的方式存在一些差异。这里有一些简单的代码来说明问题:

m-编码

假设有一个matlab例程:

function [v] = foo()
%[
    v = 42.0;
%]
end

如果在matlab上提示一个类型>> foo(),那么一个获得ans = 42,如果一个类型>> foo();没有显示... 到目前为止,那么好 ...

MEX-代码

现在假设以下等效例程为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同样认为nlhs0(请参阅mexPrintf调试输出)并且ans值没有显示。

问题

我希望mex-code的行为与m-code一样。

到目前为止,我之前删除了测试if (nlhs == 1)以分配plhs[0] ...并且它有效......但是在所有情况下这样做都是100%安全的;通常nlhs == 0所以访问plhs[0]应该没问题,对吧? ......这很奇怪......或许有更安全的方法? ...

1 个答案:

答案 0 :(得分:4)

来自http://fr.mathworks.com/help/matlab/matlab_external/data-flow-in-mex-files.html

  

注意:即使nlhs = 0,也可以返回输出值,这对应于在ans变量中返回结果。