#ifdef 내부 #define


83

다음과 같이 작성하려고합니다.

COV_ON이렇게 정의 할 방법 이 있습니까? 나는 #ifdef#define 안에 가질 수 없기 때문에 위에서 한 일이 잘못되었음을 알고 있습니다 . ( #은에서 허용되는 문자가 아닙니다 #define). 그래서 어떤 해결책이 있습니까?


1
여기의 모든 답변 do {} while(0)은 빈 진술을 피하기 위해 (또는 동등한) 사용을 생략 한 것 같습니다 . 연결된 중복에
Roger Lipscombe

답변:


89

불가능합니다. 다른 방법으로 수행하십시오.


21

간단히 뒤집기 :


답장을 보내 주셔서 감사합니다. COV_ON (on) 및 COV_ON (off) 시도했지만 오류가 발생했습니다. 문제에 대한 아이디어.
agent.smith 2011-04-07

그들은 문자열입니다. 따옴표 안에 일반 문자열로 사용해야합니까? "켜기"및 "끄기"처럼.
agent.smith 2011-04-07

COVERAGE의 정의에 따라 다르지만 인용문이 필요하다고 생각합니다. 이 새로운 문제에 대해 다른 질문을 여는 것이 좋습니다.
Philip

나는 따옴표로 시도했지만 사용하지 않았습니다. 이미 새 스레드를 열었습니다. _Pragma에 대한 구문이 잘못되었다고 생각하면 알려주세요.
agent.smith 2011-04-07

14

이것은 오래된 질문이지만 최신 답변이 필요했습니다.

매크로 내에서 인라인 ifdef를 사용하는 대신 선택적으로 정의 할 수 있습니다. __VA_ARGS__ 매크로를 하여 동일한 작업을 수행

이 괄호는 여전히 사용할 수 있지만 (대부분의 IDE는 아무런 문제가 코드 폴딩이 없습니다) 시작과 끝 윤곽을 얻을 것을 제외하고 IFDEF 유사한 기능이있다 #define하고 #ifdef, 맥락을#include 허용되지 않습니다. 와 유사한 인라인 기능을 얻으려면 #else다음과 같이 해당 매크로를 정의 할 수 있습니다.

중 하나만 NO_FOO()/IF_FOO코드를 생성합니다.

좋습니다, 그것은 편리한 해킹입니다. 그러나 우리는 그것을 유용하게 만들 수 있습니다.#ifdefs 있습니까? 진리표 (및 몇 가지 도우미 매크로)를 설정할 수 있습니다.

config.h

code.c


당신의 스타일과 같은 I (=
étale - 코호 몰 로지

6

6

당신은 할 수 없습니다. 하지만 당신은 교환 할 수 #ifdef#define:


답장을 보내 주셔서 감사합니다. COV_ON (on) 및 COV_ON (off) 시도했지만 오류가 발생했습니다. 문제에 대한 아이디어.
agent.smith 2011-04-07

컴파일러를 모르면 예상되는 _Pragma구문이 무엇인지 알아야 합니다. 매크로없이 어떻게 하시겠습니까?
sam hocevar 2011

나는 VC2005 컴파일러를 사용하고 있으며 온라인에서 _Pragma 구문을 보았습니다. 나는 전에 이런 식으로 #pragma를 사용한 적이 없습니다.
agent.smith

그러면 stringify 해킹이 필요합니다. 이 질문과 답변을 참조하십시오 .
sam hocevar 2011

문제는 VC2005라고 생각합니다. 그들은 _Pragma를 사용하지 않고 __pragma를 사용합니다. 잘 모르겠지만 그런 것 같습니다. 하지만 여전히 __pragma로 알려지지 않은 pragma 경고가 표시됩니다.
agent.smith 2011-04-07

3

언급했듯이 #define에 #ifdef를 포함하는 것은 불가능합니다. 대신해야 할 일은 순서를 반대로하는 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.