매크로를 깔끔하게 만들고 싶습니다.

air74의 이미지

안녕하세요.

다음의 매크로를 깔끔 하게 만들 수 있는 방법 없을까요?

매크로 초보 라서리. ^^;;;;

#define CPMB_VALIDATE_EVENT(p, i) {         \
  if(i == CPMB_MAX_SIGNAL){                 \
     return FALSE;                          \
  }                                         \
  if(p->event_table[i].head.in_use){        \
     return TRUE;                           \
  }                                         \
  return FALSE;                             \
}
doldori의 이미지

return을 쓴 걸 보니 함수인가 보죠? 하지만 간단하게 식으로 표시할 수 있습니다.

#define CPMB_VALIDATE_EVENT(p, i)  \
  ( (i) != CPMB_MAX_SIGNAL && (p)->event_table[(i)].head.in_use )
htna의 이미지

매크로를 사용한다면 그냥 있는 그대로 두는게 더 깔끔할듯 하군요.
저 상태 그대로가 그냥 보기 편합니다.
만약 매크로를 사용하기 싫으시다면...

inline BOOL CPMB_VALIDATE_EVENT(xxx* p, int i)
{
  if(i == CPMB_MAX_SIGNAL)
    return FALSE;
  if(p->event_table[i].head.in_use)
     return TRUE;
  return FALSE;
}

사용:
return CPMB_VALIDATE_EVENT(p,i);

하면 되겠군요...
저같으면 그냥 함수로 만들어 사용하는편에 한표 입니다.

매크로 자체가 가독성과 디버깅을 어렵게 하기 땜시...

WOW Wow!!!
Computer Science is no more about computers than astronomy is about telescopes.
-- E. W. Dijkstra

lifthrasiir의 이미지

air74 wrote:
안녕하세요.

다음의 매크로를 깔끔 하게 만들 수 있는 방법 없을까요?

매크로 초보 라서리. ^^;;;;

#define CPMB_VALIDATE_EVENT(p, i) {         \
  if(i == CPMB_MAX_SIGNAL){                 \
     return FALSE;                          \
  }                                         \
  if(p->event_table[i].head.in_use){        \
     return TRUE;                           \
  }                                         \
  return FALSE;                             \
}

매크로에서 return을 쓰면 그 값을 반환하는 거라 생각하신 듯 하네요. 하지만 C/C++의 매크로는 단순 치환에 불과하기 때문에, 저런 내용을 실제로 쓰면 return 문은 그 매크로가 사용된 함수로부터 빠져 나오는 역할을 하게 됩니다. (말 그대로 단순 치환이니까... return을 그대로 쓰는 것과 같죠) doldori 님께서 쓰신 것처럼 저런 종류의 매크로는 하나의 수식으로 표현될 수 있게 만들어야 하거나, inline function으로 대체하는 것이 좋습니다.

- 토끼군

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.