2009-10-04 4 views
-2

이 코드를 수행하기 위해 노력하고있어 ...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; 
} 

완성 된 코드 함수 호출을 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을 교체 할 때

는 사실 내가가 뭔가를 엉망 이니까 실현 ... 내가 망쳐 제안 ... 어쩌면 그와 후크

+0

나는 인라인 함수를 사용하고 싶지 않다. 그냥 함수 호출 accumulate_sum을 실제 코드로 바꾸고 싶다. –

+2

코드를 들여 쓰고 난 후, 문제를 더 쉽게 볼 수있다. –

+0

왜 그런지 궁금하다. 당신은 인라인을 사용하고 싶지 않습니다. IMHO 인라이닝은 속도 편익과 가독성을 결합합니다. – fvu

답변

5

당신은 참이 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 루프에 중괄호를 사용하면 오류를 줄일 수 있습니다.