我可以 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 同样考虑 nlhs
是 0
(参见 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.
我注意到在使用 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
一样。
到目前为止,我在分配 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.