我有一个mex函数,它接受第三个输入中的结构字段(即prhs[2]
),这是一个布尔值。如果为true,它将解析来自第四个输入的信息(即prhs[3]
)。简而言之,这是代码摘录:
mxValue = mxGetField(prhs[3], 0, "change"); mxLogical *change;
change = mxGetLogicals(mxValue);
mexPrintf("true/false: %i \n", *change);
mexEvalString("drawnow;");
if ( change ) {
mexPrintf("...Parsing info... \n");
mexEvalString("drawnow;");
mxValue = mxGetField(prhs[3], 0, "info");
nRows = mxGetM(mxValue); nCols = mxGetN(mxValue);
Eigen::Map<Eigen::VectorXd> info((double *)mxGetPr(mxValue),nRows);
}
如您所见,我打印输出以查看输入prhs[2]
是真还是假。即使函数打印出false,if语句也会被执行,因为我可以看到打印输出...Parsing info...
。
为什么我的MATLAB mex函数忽略了我的if语句?
答案 0 :(得分:2)
C不是MATLAB! C是C!
您正在检查指针change
是否有值。它确实具有一个值,一个记忆方向,例如#72BA21
,到存储布尔值的位置。
你可以检查@buzjwa建议的特定方向if(*change)
内的内容,或者使用mxGetData
获取有关数组的信息,而不是指向它的指针。
作为旁注:学习调试,或至少打印语句。一个简单的mexPrintf()
调用会向您显示change
包含的内容