找回密码
 注册
查看: 2973|回复: 9

udf中的for循环编译时报错

[复制链接]
发表于 2011-5-28 16:34:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
程序如下。DEFINE_PROPERTY之前的代码是为了生成一个密度较大的区域,区域形状随便写的,为了试验。

#include "udf.h"

int i,j,k;
int c[200][80][1];
real pos[16000][2];

       
for(i=0;i<200;i++)
                for(j=0;j<80;j++)
                {
                        c[j][0]=0;
                }

        for(i=0;i<16000;i++)
        {
                pos[0]=0;
                pos[1]=0;
        }

        for(i=90;i<120;i++)
                for(j=0;j<30;j++)
                {
                        c[j][0]=1;
                }

        k=0;

        for(i=0;i<200;i++)
                for(j=0;j<80;j++)
                        if(c[j][0]==1)
                        {
                                pos[k][0]=0.004*i+0.002;
                                pos[k][1]=0.004*j+0.002;
                                k++;
                        }

DEFINE_PROPERTY(cell_density,c,t)
{
    real x[ND_ND];
        real rho;
        int check;

        check=0;

        C_CENTROID(x,c,t);
       
        for(k=0;k<16000;k++)
                if((pos[k][0]+pos[k][1])!=0)
                        if(x[0]==pos[k][0] && x[1]==pos[k][1])
                        {
                                rho=C_T(c,t)+1000000;
                                check=1;
                        }

        if(check==0)
                rho=610;

        return rho;

}

fluent里编译时错误如下:
..\..\src\cell_density.c(8) : error C2059: syntax error : 'for'
..\..\src\cell_density.c(8) : error C2143: syntax error : missing '{' before '<'
..\..\src\cell_density.c(8) : error C2059: syntax error : '<'
..\..\src\cell_density.c(8) : error C2143: syntax error : missing '{' before '++'
..\..\src\cell_density.c(8) : error C2059: syntax error : '++'
..\..\src\cell_density.c(8) : error C2059: syntax error : ')'
..\..\src\cell_density.c(9) : error C2143: syntax error : missing '{' before '<'
..\..\src\cell_density.c(9) : error C2059: syntax error : '<'
..\..\src\cell_density.c(9) : error C2143: syntax error : missing '{' before '++'
..\..\src\cell_density.c(9) : error C2059: syntax error : '++'
..\..\src\cell_density.c(9) : error C2059: syntax error : ')'
..\..\src\cell_density.c(14) : error C2059: syntax error : 'for'
..\..\src\cell_density.c(14) : error C2143: syntax error : missing '{' before '<'
..\..\src\cell_density.c(14) : error C2059: syntax error : '<'
..\..\src\cell_density.c(14) : error C2143: syntax error : missing '{' before '++'
..\..\src\cell_density.c(14) : error C2059: syntax error : '++'
..\..\src\cell_density.c(14) : error C2059: syntax error : ')'
..\..\src\cell_density.c(20) : error C2059: syntax error : 'for'
..\..\src\cell_density.c(20) : error C2143: syntax error : missing '{' before '<'
..\..\src\cell_density.c(20) : error C2059: syntax error : '<'
..\..\src\cell_density.c(20) : error C2143: syntax error : missing '{' before '++'
..\..\src\cell_density.c(20) : error C2059: syntax error : '++'
..\..\src\cell_density.c(20) : error C2059: syntax error : ')'
..\..\src\cell_density.c(21) : error C2143: syntax error : missing '{' before '<'
..\..\src\cell_density.c(21) : error C2059: syntax error : '<'
..\..\src\cell_density.c(21) : error C2143: syntax error : missing '{' before '++'
..\..\src\cell_density.c(21) : error C2059: syntax error : '++'
..\..\src\cell_density.c(21) : error C2059: syntax error : ')'
..\..\src\cell_density.c(28) : error C2059: syntax error : 'for'
..\..\src\cell_density.c(28) : error C2143: syntax error : missing '{' before '<'
..\..\src\cell_density.c(28) : error C2059: syntax error : '<'
..\..\src\cell_density.c(28) : error C2143: syntax error : missing '{' before '++'
..\..\src\cell_density.c(28) : error C2059: syntax error : '++'
..\..\src\cell_density.c(28) : error C2059: syntax error : ')'
..\..\src\cell_density.c(29) : error C2143: syntax error : missing '{' before '<'
..\..\src\cell_density.c(29) : error C2059: syntax error : '<'
..\..\src\cell_density.c(29) : error C2143: syntax error : missing '{' before '++'
..\..\src\cell_density.c(29) : error C2059: syntax error : '++'
..\..\src\cell_density.c(29) : error C2059: syntax error : ')'
是for循环的问题吗?
发表于 2011-5-28 17:37:03 | 显示全部楼层
syntax error :语法错误
提示里已经很清楚地指出哪儿出错了
你的几个最外层的for下面应该少了{}
发表于 2011-5-28 22:25:07 | 显示全部楼层
可执行语句不能放在函数外面,至少应该是在DEFINE_ON_LOADING里面
 楼主| 发表于 2011-5-29 09:48:31 | 显示全部楼层

回复 2# joke057 的帖子

谢谢,不过应该不是这个问题。可能在宏外写可执行语句编译时就会出错
 楼主| 发表于 2011-5-29 09:51:47 | 显示全部楼层

回复 3# gearboy78 的帖子

确实是这样。我试了一下把宏之外的代码放到DEFINE_ON_LOADING里,编译时就没报错。可是现在我需要把这段代码生成的数组记录下来,供DEFINE_PROPERTY使用。除了把数据写进.dat文件,执行DEFINE_PROPERTY时再读进来之外还有什么解决方法吗?fluent内部能存储吗?
谢谢!
发表于 2011-5-30 09:15:43 | 显示全部楼层
放在宏外面定义的是全局变量,任何其它的宏里面都可以调用的。
 楼主| 发表于 2011-5-30 10:16:15 | 显示全部楼层

回复 6# gearboy78 的帖子

可是我在DEFINE_PROPERTY内部调用for函数的时候还是一直报错,提示无非是“<”运算符无效,for函数的函数体之前缺少“;”等等,这是为什么呢?会不会是vc++ 6.0的问题?
发表于 2011-5-30 14:23:07 | 显示全部楼层
源码贴出来
 楼主| 发表于 2011-6-1 07:39:22 | 显示全部楼层

回复 8# gearboy78 的帖子

问题已经解决了,是变量定义的问题。fluent里只能在c文件开头定义变量,不能随用随定义啊
发表于 2011-6-1 10:06:15 | 显示全部楼层


Windows下是这样,Linux下udf和VC++编写udf可以任何时候声明。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表