【发布时间】:2014-05-04 04:14:39
【问题描述】:
我在从以下 C 函数生成 MEX 文件时遇到了一些问题:
#include <math.h>
#include <mex.h>
void mexFunction(int nlhs, mxArray *plhs[], /* Output variables */
int nrhs, const mxArray *prhs[]) /* Input variables */
{
#define y plhs[0]
#define x prhs[0]
double y, x, p;
int Y, X;
mexPrintf ("x = %d",x);
if(nrhs < 1 or nrhs > 2) /* Check the number of arguments */
mexErrMsgTxt("Wrong number of input arguments.");
else if(nlhs > 1)
mexErrMsgTxt("Too many output arguments.");
if(nrhs == 1) /* If p is unspecified, set it to a default value */
c = 3.0;
y=c*x*x;
X=mxIsDouble(x);
Y=mxIsDouble(y);
mexPrintf ("the value for y is %d",Y);
}
我做了很多研究,但我似乎仍然无法理解这个概念。我的任务只是生成一个MEX文件,在matlab中输入x时可以生成y=3x^2。 我将文件保存为 quadratic.c。当我输入时
`mex quadratic.c`
在 matlab 命令中,我得到:
二次方.c quadratic.c(15):错误 C2143:语法错误:缺少“;”在“类型”之前 quadratic.c(15):错误 C2143:语法错误:缺少“;”前 ',' quadratic.c(15):错误 C2143:语法错误:缺少“;”前 ',' quadratic.c(16):错误 C2143:语法错误:缺少“;”在“类型”之前 quadratic.c(18):错误 C2143:语法错误:在 ';' 之前缺少 ')' quadratic.c(18):错误 C2059:语法错误:')' quadratic.c(19):错误 C2146:语法错误:在标识符“或”之前缺少“)” quadratic.c(19):错误 C2065:“或”:未声明的标识符 quadratic.c(19):错误 C2146:语法错误:缺少“;”在标识符“nrhs”之前 quadratic.c(19):错误 C2059:语法错误:')' quadratic.c(19):错误 C2143:语法错误:缺少“;”前 '{' quadratic.c(19) : 警告 C4552: '>' : 运算符无效;具有副作用的预期运算符 quadratic.c(21) : 错误 C2181: 非法 else 不匹配 if quadratic.c(25):错误 C2065:'c':未声明的标识符 quadratic.c(25) : 警告 C4244: '=' : 从 'double' 转换为 'int',可能丢失数据 quadratic.c(27):错误 C2143:语法错误:缺少 ';'在'='之前 quadratic.c(29):错误 C2065:'X':未声明的标识符 quadratic.c(29):错误 C2143:语法错误:在 ';' 之前缺少 ')' quadratic.c(29):错误 C2059:语法错误:')' quadratic.c(30):错误 C2065:'Y':未声明的标识符 quadratic.c(30):错误 C2143:语法错误:在 ';' 之前缺少 ')' quadratic.c(30):错误 C2059:语法错误:')' quadratic.c(33):错误 C2065:'Y':未声明的标识符 C:\PROGRA~1\MATLAB\R2013A\BIN\MEX.PL:错误:“quadratic.c”编译失败。我不知道该怎么办。我确定我做错了什么,但我无法弄清楚。
【问题讨论】:
-
因为你在没有真正理解的情况下使用了邪恶的宏。当您声明
double y, x时,它会被预处理器替换为double plhs[0], prhs[0]。这与论点冲突