我参考一本书上的例子编了一个用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);
}
我现在怀疑版本问题,或者是我的软件完整性的问题,其他真的不知道了,因为这可是和书上一样的,也和网上的参考文章也是一样的,为什么我就不能用呢,真是纳闷了。



 
											





 
	    

 
	


