2012-06-08 5 views
1

일반적인 실린더의 윗면의 주축과 단축을 나타내는 4 개의 벡터 크기를 취하는이 함수와 비슷한 매크로를 정의하는 데 문제가 있습니다. 일반적으로 실린더 형. EQUAL 두 개의 부동 소수점 값이 서로 "동일한"인 경우, 이미 정의 된 매크로 참조한다.오류 : 예상 식별자 또는 앞에 '('앞에, 매크로 정의

3080 #define GET_TGC_TYPE(_type, _a, _b, _c, _d) { \ 
3081  if (EQUAL((_a), (_b)) && EQUAL((_c), (_d))) { \ 
3082   /* circular base and top */ 
3083   if (EQUAL((_a), (_c))) { \ 
3084    /* right circular cylinder */ 
3085    (_type) = RCC; \ 
3086   } else { \ 
3087    /* truncated right cone */ 
3088    (_type) = TRC; \ 
3089   } \ 
3090  } else { \ 
3091   /* elliptical base or top */ 
3092   if (EQUAL((_a), (_c)) && EQUAL((_b), (_d))) { \ 
3093    /* right elliptical cylinder */ 
3094    (_type) = REC; \ 
3095   } else { \ 
3096    /* truncated elliptical cone */ 
3097    (_type) = TEC; \ 
3098   } \ 
3099  } 
3100 } 

내가 갖는 에러 난 그나마

3083:9: error: expected identifier or ‘(’ before ‘if’ 
3086:11: error: expected identifier or ‘(’ before ‘else’ 
3090:5: error: expected identifier or ‘(’ before ‘}’ token 
3090:7: error: expected identifier or ‘(’ before ‘else’ 
3100:1: error: expected identifier or ‘(’ before ‘}’ token 

있다 C 매크로에 대한 많은 경험이 있으므로 전적으로 가능합니다. mi 뭔가 명백한 ssing.

+0

매크로가 'EQUAL'입니까? – qwertz

+2

이런 매크로를 유지해야만했던 사람으로서, 나는이 전체 구현을 버리고 적절한 C 함수로 다시 작성 해줄 것을 정중하게 요청합니다. 정적 인라인으로 만들고 헤더 파일에 고정시킬 수 있으며, 현재 구현의 잠재적 인 매크로 부작용이 없어도 정확히 동일하게 작동해야합니다. –

+0

@ AndrewCottrell : 나는 그것에 반대하지 않습니다. 현재 매크로에서 발생할 수있는 몇 가지 문제를 설명 할 수 있습니까? – cdk

답변

4

주석이있는 행에는 후행 \이 없으므로 매크로 정의가 첫 번째 매크로에서 중지됩니다.

+0

아, 맞습니다. 정말로 얼마나 명백한 지 – cdk

1

주석 줄에 백 슬래시가 누락 된 것처럼 보입니다.

관련 문제