#ifdefinside #dispossible
나는 다음과 같은 것을 쓰려고 한다.
#define COV_ON(x) \
#ifdef COVERAGE_TOOL \
_Pragma (COVERAGE #x)
#endif
어떤 식으로든 정의 할 수 있는 방법이 있나요?COV_ON
이렇게요?나는 내가 할 수 없기 때문에 위에서 한 것이 잘못되었다는 것을 안다.#ifdef
inside #syslog.(#
에서는 사용할 수 없는 문자입니다.#define
) 그럼 해결방법은 없나요?
안 돼.반대로 해 주세요.
#ifdef COVERAGE_TOOL
#define COV_ON(x) _Pragma (COVERAGE #x)
#else
#define COV_ON(x)
#endif
간단히 전환:
#ifdef COVERAGE_TOOL
#define COV_ON(x) _Pragma (COVERAGE #x)
#else
#define COV_ON(x) /* foo */
#endif
이것은 오래된 질문이지만 최신 답변이 필요했다.
매크로 내에서 인라인 ifdef를 사용하는 대신 선택적으로 정의하여__VA_ARGS__
같은 일을 하기 위한 매크로
#ifdef COVERAGE_TOOL
#define IF_COVERAGE_TOOL(...) __VA_ARGS__
#else
#define IF_COVERAGE_TOOL(...)
#endif
#define COV_ON(x) IF_COVERAGE_TOOL( _Pragma (COVERAGE #x) )
이 기능은 ifdef와 비슷하지만, (대부분의 IDE는 코드폴딩에 문제가 없습니다)를 사용할 수 있을 때 괄호를 사용하여 처음과 끝을 설명할 수 있습니다.#define
그리고.#ifdef
문맥 안에서#include
사용할 수 없습니다.다음과 같은 인라인 기능을 얻으려면#else
대응하는 매크로를 다음과 같이 정의할 수 있습니다.
//#define FOO
#ifdef FOO
#define IF_FOO(...) __VA_ARGS__
#define NO_FOO(...)
#else
#define IF_FOO(...)
#define NO_FOO(...) __VA_ARGS__
#endif
IF_FOO(
#define BAR 5
int foo = BAR;
)
NO_FOO(
#define foo 5
)
다음 중 하나만NO_FOO()/IF_FOO
코드를 생성합니다.
좋아요, 그거 편리한 해킹이긴 하지만 우리가 더 유용하게 쓸 수 있을까요?#ifdefs
...부울 로직과 설정?몇 가지 진실 테이블(및 몇 가지 도우미 매크로)을 설정합니다.
#define PASTE_(x,y) x##y
#define PASTE(x,y) PASTE_(x,y)
#define PASTE3_(x,y,z) x##y##z
#define PASTE3(x,y,z) PASTE3_(x,y,z)
#define Y(...) __VA_ARGS__
#define N(...)
#define IF(x) x //alternate method similar to IFNOT()
#define NOT_N Y
#define NOT_Y N
#define IF_NOT(x) PASTE(NOT_,x)
#define NOT(x) PASTE(NOT_,x)
#define N_OR_N N
#define N_OR_Y Y
#define Y_OR_N Y
#define Y_OR_Y Y
#define OR(x,y) PASTE3(x,_OR_,y)
#define N_AND_N N
#define N_AND_Y N
#define Y_AND_N N
#define Y_AND_Y Y
#define AND(x,y) PASTE3(x,_AND_,y)
#define N_XOR_N N
#define N_XOR_Y Y
#define Y_XOR_N Y
#define Y_XOR_Y N
#define XOR(x,y) PASTE3(x,_XOR_,y)
#define N_NOR_N Y
#define N_NOR_Y N
#define Y_NOR_N N
#define Y_NOR_Y N
#define NOR(x,y) PASTE3(x,_NOR_,y)
#define N_NAND_N Y
#define N_NAND_Y Y
#define Y_NAND_N Y
#define Y_NAND_Y N
#define NAND(x,y) PASTE3(x,_NAND_,y)
#define N_XNOR_N Y
#define N_XNOR_Y N
#define Y_XNOR_N N
#define Y_XNOR_Y Y
#define XNOR(x,y) PASTE3(x,_XNOR_,y)
#define IF2(x,y,z) PASTE3(x,y,z)
config.h
#define FOO Y
#define BAR N
#define BAZ Y
코드.c
AND(FOO,BAR)(/*do stuff if both FOO and BAR are enabled*/)
IF2(FOO,_AND_,BAR)( /*do stuff if both FOO and BAR are enabled*/ )
OR(BAZ,AND(FOO,BAR))(
/*do stuff if both FOO and BAR are enabled or BAZ is enabled*/
)
#ifdef COVERAGE_TOOL
#define COV_ON(x) _Pragma (COVERAGE #x)
#else
#define COV_ON(x)
#endif
할 수 없어요.교환할 수 있습니다.#ifdef
그리고.#define
:
#ifdef COVERAGE_TOOL
# define COV_ON(x) _Pragma (COVERAGE #x)
#else
# define COV_ON(x)
#endif
말씀하신 바와 같이 #define에는 #ifdef를 사용할 수 없습니다.대신 순서를 반대로 해야 합니다.
#ifdef COVERAGE_TOOL \
#define COV_ON(x) \
etc.
#endif
언급URL : https://stackoverflow.com/questions/5586429/ifdef-inside-define
'programing' 카테고리의 다른 글
C에서 가변 주소를 인쇄하는 방법은 무엇입니까? (0) | 2022.06.02 |
---|---|
구성 vue js의 머리글 설정 (0) | 2022.06.02 |
C의 시리얼 포트에서 열기, 읽기 및 쓰기는 어떻게 합니까? (0) | 2022.06.02 |
동적으로 등록된 모듈에서 vuex 변환에 액세스할 수 없음 (0) | 2022.06.02 |
fs.readdir는 기다릴 수 있지만 이유는 알 수 없습니다. (0) | 2022.06.02 |