我可以 return 来自 mex 文件的值,即使 nlhs==0 与 m 文件行为一致吗?

Can I return a value from a mex-file even when nlhs==0 to be consistent with m-file behavior?

我注意到在使用 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 同样考虑 nlhs0(参见 mexPrintf 调试输出)并且没有显示 ans 值。

问题

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

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

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

Note: It is possible to return an output value even if nlhs = 0, which corresponds to returning the result in the ans variable.