2012-03-19 2 views
0

는 C 코드의 다음 코드를 참조하십시오 브랙? 단지 괄호 안에 매크로 인수를 마무리하는 좋은 연습 간주는 왜이 rval에

#if __DEBUG__ 
#define PM_RAISE(retexn, exn) \ 
     do \ 
     { \ 
      retexn = (exn); \ 
      gVmGlobal.errFileId = __FILE_ID__; \ 
      gVmGlobal.errLineNum = (uint16_t)__LINE__; \ 
     } while (0) 
#else 
#define PM_RAISE(retexn, exn) \ 
     retexn = (exn) 
#endif 
+2

아마 일부 매크로 또는 정의 일 수 있습니다. 더 많은 코드를 표시하십시오. – ApprenticeHacker

+0

은 나에게 매크로 정의처럼 보이므로'# define'을 포함하여 올바르게 다시 포맷 할 수 있습니까? – hroptatyr

+0

이 매크로입니까? 당신은'# define'과 \ s를 생략 했습니까? –

답변

3

: (IntermediateHacker에 응답에서)

편집 여기에 원래 코드 조각입니다. 그것은 당신의 예에 많은 도움이되지만 당신이 한 말을하지 않습니다 : 그것은 분명히하지 않는 한

4 + 3 * 2 

으로 확장 할

multiply(4 + 3, 2) 

:

#define multiply(a, b) a * b 

와 함께 사용 예상 결과 (3에 2를 먼저 곱함).

0

글쎄, 내 생각 엔이 부분이 맞을 것 같지만, 산술 표현식을 exn으로 입력 할 수 있다고 생각합니다.

은 여기의 의미는 다음과 같습니다

/ * If I use: */ 
PM_RAISE(whatever, 18/9 + 5); 

/* It will generate */ 
whatever = (18/9 + 5); 

/* which is good. */ 

을 또한,이 @ 제임스가 지적한 것처럼 매크로 기능에 괄호를 포함하는 것이 좋습니다입니다.

+0

대괄호가 없으면'whatever = 18/9 + 5; '가됩니다. 그게 뭐가 잘못 됐니? –