两个For循环不同访问方式能不能写到同一个函数中?
fun1()
{
......
for(i=0;i<MAX;i++)
{
for(j=0;j<MAX2;j++)
{
......
}
}
......
}
fun2()
{
......
for(i=MAX;i>0;i--)
{
for(j=0;j<MAX2;j++)
{
......
}
}
......
}
fun3()
{
......
for(i=MAX;i>0;i--)
{
for(j=MAX2;j>0;j--)
{
......
}
}
......
}
我的Fun1到Fun8都只有For里面的条件不一样,其它地方代码完全一样.
有没有办法只写一个函数就行了?比如宏定义之类的去代替两个For() ?
前提是宏定义能不能随着变量动态改变的?
[解决办法]
#define funx(offset_x, offset_y) do{\
int i, j; \
for(i=0; i<MAX; i+=offset_x;) { \
for(j=0; j<MAX2; j+=offset_y;) { \
/* do something you want */ \
} \
} \
} while(0);
#define fun1() funx(1, 1)
#define fun2() funx(-1, 1)#include"stdio.h"
#include"conio.h"
#define MAX 10
#define _FOR_I_(off_x,off_y,off_z) for(i = off_x; i<off_y; i+=off_z)
#define _FOR_J_(off_x,off_y,off_z) for(j = off_x; j>off_y; j+=off_z)
int fun();
int main(int argc,char *argv[])
{
int num = 0;
num = fun();
printf("%d\n",num);
return 0;
}
int fun()
{
int i = 0;
int j = 0;
int sum = 0 ;
_FOR_I_(0,MAX,1)
_FOR_J_(MAX,0,-1)
sum = sum+i;
return sum;
}
foo(iStart, iEnd, jStart, jEnd)
{
...
i = iStart;
j = jStart;
while (iStart != iEnd)
{
while (jStart != jEnd)
{
...
if (jStart < jEnd)
j++;
else
j--;
}
if (iStart < iEnd)
i++;
else
i--;
}
...
}
foo(0, MAX, 0, MAX2);
foo(MAX, 0, 0, MAX2);
foo(MAX, 0, MAX2, 0);
#include"stdio.h"
#include"conio.h"
#define MAX 10
#define _FOR_I_(off_x,off_y,off_z) for(i = off_x; i<off_y; i+=off_z)
#define _FOR_J_(off_x,off_y,off_z) for(j = off_x; j>off_y; j+=off_z)
#define _FOR_R_(M,N) do{\
for(int k=0; k<N; ++k){M+=k;}\
}while();
int fun();
int main(int argc,char *argv[])
{
int num = 0;
num = fun();
printf("%d\n",num);
return 0;
}
int fun()
{
int i = 0;
int j = 0;
int sum = 0 ;
_FOR_I_(0,MAX,1)
_FOR_J_(MAX,0,-1)
sum = sum+i;
return sum;
}