【问题标题】:c function callc函数调用
【发布时间】:2009-10-04 08:53:16
【问题描述】:

我正在尝试使用此代码...

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_sum的函数调用...

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;
}

现在我想出的完整代码,包括我试图用 sum 的实际代码替换函数调用 sum,看起来像这样......

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 时搞砸了……任何建议……也许是我搞砸了它的括号……

【问题讨论】:

  • 我不想使用内联函数我只想用实际代码替换函数调用accumulate_sum...
  • 正确缩进代码后,更容易看出问题
  • @John 很好奇你为什么不想使用内联。恕我直言,内联结合了速度优势和更好的可读性?
  • @Igor 修复帖子中的代码会丢失问题的上下文
  • 您已经发布了 4 次相同的问题。 stackoverflow.com/questions/1515023/… -- 你能坚持1个线程吗?

标签: c function replace


【解决方案1】:

您确实搞砸了大括号 { },如果您通过诸如 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 循环都使用大括号,这样你可能会犯更少的错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-22
    相关资源
    最近更新 更多