c函数调用
问题描述:
我想利用这个代码...c函数调用
char mysmooth1_ descr[] = "my smooth1: My smooth1 replaced avg() func. and assign sum to pixel";
void mysmooth1 (int dim, pixel *src, pixel *dst)
{
int i, j;
int ii, jj;
pixel_ sum sum;
pixel current_ pixel;
for (i = 0; i < dim; i++)
for (j = 0; j < dim; j++)
{
initialize_pixel_sum(&sum);
for(ii = max(i-1, 0); ii <= min(i+1, dim-1); ii++)
for(jj = max(j-1, 0); jj <= min(j+1, dim-1); jj++)
accumulate_sum(&sum, src[RIDX(ii, jj, dim)]);
{
current_ pixel.red = (unsigned short) (sum.red/sum.num);
current_ pixel.green = (unsigned short) (sum.green/sum.num);
current_ pixel.blue = (unsigned short) (sum.blue/sum.num);
dst[RIDX(i, j, dim)] = current_pixel;
}
}
}
并替换函数调用accumulate_总和,与此代码...
static void accumulate_ sum (pixel_sum *sum, pixel p)
{
sum->red += (int) p.red;
sum->green += (int) p.green;
sum->blue += (int) p.blue;
sum->num++;
return;
}
现在完成的代码我想出了,其中包括我试图取代函数调用总和的实际代码总和看起来像这样...
char mysmooth2_descr[] = "my smooth2: My smooth1 replaced avg() func. and assign sum to pixel and accumulate sum func.";
void mysmooth2(int dim, pixel *src, pixel *dst)
{
int i, j, num;
int ii, jj;
pixel_sum sum;
pixel current_pixel;
for (i = 0; i < dim; i++)
for (j = 0; j < dim; j++)
{
initialize_pixel_sum(&sum);
for(ii = max(i-1, 0); ii <= min(i+1, dim-1); ii++)
for(jj = max(j-1, 0); jj <= min(j+1, dim-1); jj++)
sum.red += (int) p.red;
sum.green += (int) p.green;
sum.blue += (int) p.blue;
sum.num++;
{
current_ pixel.red = (unsigned short) (sum.red/sum.num);
current_ pixel.green = (unsigned short) (sum.green/sum.num);
current_ pixel.blue = (unsigned short) (sum.blue/sum.num);
dst[RIDX(i, j, dim)] = current_pixel;
}
}
}
现在,我认为我做对了,但我不断收到错误,这阻止了我编写代码......如果有人能告诉我我做错了什么,那会很好。我在某处丢失括号吗?我是否应该在某处添加更多的代码......任何能够帮助我在未来完成此任务的建议或示例都将不胜感激。谢谢。
其实我现在认识到,我弄乱的东西了试图与实际的代码替换函数调用时accumulate_sum ...任何建议...也许它的支架是我搞砸了......
答
确实这样拧上大括号{},就像您通过格式化程序(如astyle)运行代码一样。
void mysmooth2(int dim, pixel *src, pixel *dst)
{
int i, j, num;
int ii, jj;
pixel_sum sum;
pixel current_pixel;
for (i = 0; i < dim; i++)
for (j = 0; j < dim; j++) {
initialize_pixel_sum(&sum);
for (ii = max(i - 1, 0); ii <= min(i + 1, dim - 1); ii++)
for (jj = max(j - 1, 0); jj <= min(j + 1, dim - 1); jj++)
sum.red += (int) p.red;
sum.green += (int) p.green;
sum.blue += (int) p.blue;
sum.num++;
{
current_ pixel.red = (unsigned short) (sum.red/sum.num);
current_ pixel.green = (unsigned short) (sum.green/sum.num);
current_ pixel.blue = (unsigned short) (sum.blue/sum.num);
dst[RIDX(i, j, dim)] = current_pixel;
}
}
}
直到你有一些经验,对所有for循环使用花括号,并且可能会减少错误。
我不想用内联函数我只是想用实际的代码替换函数调用accumulate_sum ...... – 2009-10-04 09:03:10
正确缩进代码后,就容易多了,看问题 – 2009-10-04 09:10:11
@约翰为什么好奇你不想使用内联。恕我直言内联结合速度优势和更好的可读性? – fvu 2009-10-04 09:18:50