我参考一本书上的例子编了一个用c产生mat文件的程序,发现总有一个问题遗留,怎么也消除不去了,于是我就把书上的例子一摸一样的照搬上去,可同样的问题还是存在,我实在是搞不清楚了。
出错的描述是:
lcc preprocessor error: test.c:19 Disagreement in number of macro arguments
说是:matlab自带的c编译器lcc预处理时出错,“宏参数数目不一致”。
出错的位置是程序里的这个语句:
mxSetName(mdata,"mydata");
这个函数我在matlab的帮助文档里也查不到具体说明,只有一点说明,是说这个函数是老函数,可以用函数matPutVariable代替,但例子里这两个函数都用到了,我参考网上的文章,遇到生成矩阵的mat文件时,这两个函数也都用到了,另外我用的是7.2的版本,也就是R2006a,参考书是关于7.0的,按理说不应该存在兼容问题。
参考书上的例子如下,是产生一个数组和字符串,把它们写入创建的mat文件里,就是最简单的mat文件生成程序:
#include "mat.h"
int makemat(const char *filename,
double *data,int m,int n,
char *mmstr)
{
MATFile *mfile;
mxArray *mdata,*mstr;
mfile=matOpen(filename,"w");
if(mfile==NULL)
{
printf("Cannot open %s for writing.\n",filename);
return(EXIT_FAILURE);
}
mdata=mxCreateDoubleMatrix(n,m,mxREAL);
mxSetName(mdata,"mydata");
memcpy((void *)(mxGetData(mdata)),(void *)data,
m*n*sizeof(double));
mstr=mxCreateString(mmstr);
matPutVariable(mfile,"mydata",mdata);
matPutVariable(mfile,"mystr",mstr);
mxDestroyArray(mdata);
mxDestroyArray(mstr);
if(matClose(mfile)!=0)
{
printf("Cannot close %s.\n",filename);
return(EXIT_FAILURE);
}
return(EXIT_SUCCESS);
}
int main()
{
int status;
char *mmstr="Mastering MATLAB Rocks!";
double data[3][4]={{ 1.0 , 2.0 , 3.0 , 4.0},
{ 5.5 , 6.6 , 7.7 , 8.8},
{-4.0 ,-3.0 ,-2.0 ,-1.0}};
status=makemat("mmtest.mat",*data,3,4,mmstr);
return(status);
}
我现在怀疑版本问题,或者是我的软件完整性的问题,其他真的不知道了,因为这可是和书上一样的,也和网上的参考文章也是一样的,为什么我就不能用呢,真是纳闷了。