define을 묶어서 사용하고 싶습니다.

kkb의 이미지

#if defined (FEATURE_A)
A
#elif defined (FEATURE_B)
B
#elif defined (FEATURE_C)
C
#else
D
#endif
 
#if defined (FEATURE_A) || defined (FEATURE_B) || defined (FEATURE_C)
F
#endif

위와 같이 쓰고 있는데
#if defined (FEATURE_A) || defined (FEATURE_B) || defined (FEATURE_C)
실제로는 define이 훨씬 더 너무 많아서
지저분 하고 너무너무 길어집니다.
깔끔하게 줄일 수 있는 보기 좋은 방법이 있을까요?

#define FEATURE_ABC ~~~~~
이렇게 미리 선언해놓고

#if defined (FEATURE_ABC)
F
#endif

이렇게 사용하면 되겠죠.
~~~~~ 이 부분을 어떻게 선언해야 할 지 모르겠어요.
예전에 커널에서 이런 코드 본 적이 있었는데 grep 해봐도 못찾겠고 keyword를 뭐라고 해야 할 지 모르겠습니다.

Anti-Lock의 이미지

이런건 어떨까요?

#if defined (FEATURE_A)
A
#if defined (FEATURE_B)
B
#if defined (FEATURE_C)
C
#else
#define NO_FEATURE
D
#endif
 
#if !defined (NO_FEATURE)
F
#endif
kkb의 이미지

#if defined (FEATURE_A)
A
#elif defined (FEATURE_B)
B
#elif defined (FEATURE_C)
C
#else
#define NO_FEATURE
D
#endif

위의 코드는 예시로 든 거 라서 실제로 저런 부분은 없습니다.
저렇게 사용하기는 어려워요

실제로는 아래와 같은 식으로 여러 군데 되어 있다는 거죠.

#if defined (FEATURE_A)
A
#if defined (FEATURE_C)
C
#else
M
#endif
 
#if defined (FEATURE_B)
B
#else
N
#endif
 
#if defined (FEATURE_A) || defined (FEATURE_C)
D
#endif

아무튼 답변 감사드립니다.

익명 사용자의 이미지

#define FEATURE_ABC_DEFINED (defined (FEATURE_A) || defined (FEATURE_B) || defined (FEATURE_C))
 
#if FEATURE_ABC_DEFINED
F
#endif

kkb의 이미지

실제로 이런 식으로 많이 쓰나요?

좋은 방법인 거 같습니다. 답변 감사드립니다.