原本写给一个朋友的,帮助她入门matlab与C混编的
>#####环境:
* Matlab:MATLAB R2013a
* C编译器VC++2012
===
#####配置环境:
在**Matlab**命令行下输入:
**step.1**
```
mex -setup
```
---
**step.2**
你也可以使用:
```
help mex
```
查看更多信息
---
**step.3**
按提示安装C编译器
---
**step.4**
编写**c-mex**文件
可使用
```
edit
```
命令在matlab中打开编辑器
===
#####**C-MEX**文件的结构:
* 引入头文件:
```
#include "mex.h"
```
* 定义计算子函数
```
double add(double x, double y)
{
return x + y;
}
```
*引入接口函数
```
void mexFunction(
int nlhs,
mxArray *plhs[],
int nrhs,
const mxArray *prhs[])
{
/*your code*/
}
```
====
####说明:
> 核心是计算子函数,在C语言中函数要先声明才能使用,所以计算子函数的函数声明放在前面。
> 接口函数是C语言和matlab的接口,或者理解成协议,桥梁也可以,它接受4个参数:nlhs是左手参数个数,plhs是左手参数数组其内容为指针,该指针指向数据类型为mxArray的变量。相对应的nrhs和prhs。
> 编写的**C-Mex**文件应该保存为.c文件,文件类型是**all file**,尤其要强调的一点是,该文件的文件名要和函数的函数名一致,不然使用的时候会报**undefined function**的错误
>当启用mex之后,你可以使用这段程序来检查环境是否正确:
```
[print.c]
# include "mex.h"
void mexFunction(int nlhs,double *plhs[],int nrhs,double *prhs[]){
mexPrintf("hello");
}
```
保存为print.c之后命令行运行
```
>>mex print.c
>>print
```
如果编译没问题,打印出hello>>这种形式,那么说明环境ok
> 下面是一个完整的例子及其过程 :
```
[add.c]
#include "mex.h"
double add(double x, double y)
{
return x + y;
}
void mexFunction(int nlhs,mxArray *plhs[], int nrhs,const mxArray *prhs[])
{
double *a;
double b, c;
plhs[0] = mxCreateDoubleMatrix(1, 1, mxREAL);
a = mxGetPr(plhs[0]);
b = *(mxGetPr(prhs[0]));
c = *(mxGetPr(prhs[1]));
*a = add(b, c);
}
```
在命令行中执行
```
mex add.c
```
来编译它
若无报错,再执行
```
c=add(1.1,2.2)
```
则c的值即是3.3
关于此段程序,可参考 [这篇文章](http://blog.sina.com.cn/s/blog_468651400100coas.html)