2014-11-25 2 views
2

다음과 같은 문제가 있습니다. 다른 사람의 코드에 의존하는 코드을 쓰고 있습니다.이 코드는 변경할 수 없습니다. 그리고 그 코드에서 (나는 변경할 수 없습니다) 전 처리기 지시어를 정의합니다. 내 코드는이 다른 코드보다 먼저 컴파일됩니다. 그리고 내 코드가이 코드의 영향을받지 않도록이 코드를 우회하는 방법이 필요합니다. 지시문을 정의하십시오.define 지시문을 무시하는 방법은 무엇입니까?

어떻게하면 전 처리기에게 지금부터 모든 지시문을 무시하도록 지시 할 수 있습니까?

나를 위해 거의 효과가 있었던 것은 다음과 같은 pragma poison 지시어 였지만, 불행히도 오류가 발생합니다. 이 오류를 억제하는 방법이 있습니까?

#pragma GCC poison define 

나는 이것이 쉬운 질문이 아니라는 것을 알고 있지만 정말로 도움이 될 것입니다.

+1

'# ifdef'와 함께'#default '를 사용할 수 없습니까? – syntagma

+0

내 전 처리기 지시문이 다른 지시문보다 먼저 실행되기 때문에 그럴 수 없습니다. 그 때 아무 것도 정의되어 있지 않습니다 ... – Void

+0

@REACHUS 그의 코드는 다른 코드보다 먼저 컴파일됩니다. 어쨌든, 전처리 기가 고려되지 않습니다. 그냥 "이봐, 하지마?"라고 말할 수는 없습니까? – edmz

답변

0

나는 다음과 같이 할 수 있다고 생각한다 : 다른 코드가 stringchar *으로 정의하고 포함시켜야 할 헤더에 어딘가에 있다고 정의하는 것이 문제라고 가정한다. 코드가 같은 헤더를 모든 시간을 포함하면

#ifdef string 
    #undef string 
#endif 

당신이 모두가 하나의 헤더에 포함 넣고 마지막에 살균 할 수 있습니다 다음 그냥 다른 코드에서 포함 후에는 c 파일에서 정의 할 수있는 예는 수 other_include.h :

#ifndef _OTHER_INCLUDE_H 
#include <otherheader_a.h> 
#include <otherheader_b.h> 
#include <otherheader_c.h> 

/*Sanitize string definition */ 

#ifdef string 
    #undef string 
#endif 
#endif /* _OTHER_INCLUDE_H */ 

당신이 sanitize.h 헤더를 작성해야 운이 아닌 다른 모든 당신의 c 파일에 포함 후에을 포함합니다.

당신은 매크로를 비활성화 한 후 복구 코드의 일부가 필요 또한 경우

#ifdef string 
    #define _temp_string string 
    #undef string 
#endif 

을하고

#ifdef _temp_string 
    #define string _temp_string 
    #undef _temp_string 
#endif 

정말 우아하지 그것을 복구 싶지만 때 당신이 그것을 사용할 수 있습니다 서브 루틴을 안전하게 만들기위한 미세한 입자로.

+0

문제는 내가 코드 정의 부분에 접근 할 수 없다는 것입니다. #define string char *이 정의되어 있습니다 - 다른 코드에 있습니다. – Void

+0

@ user3748798 이해가 안됩니다 : 코드에서 그 지시어를 사용하고 싶지 않습니까? ? –

+0

아니요, define 지시문이 내 코드에 영향을 미치기를 원하지 않습니다. – Void

0

당신은 그 전 처리기 지시어가 다른 지시문보다 먼저 실행되기 때문에, 그때 아무것도 정의되어 있지 않다고 쓴다고하셨습니다.

이 경우에는 전처리 기 단계에서 사용자 고유의 스크립트를 사용하여 파일을 사전 처리하고 필요에 맞게 정의 된 값을 변경하여 코드에 영향을 미치지 않는 유일한 해결책이라고 생각합니다. 나는 더 나은 해결책이 없다고 생각합니다.

+0

다음과 같이 내가 피하려고 노력하고있어이 지침은 다음과 같습니다 #DEFINE 문자열 문자 * 을 내가 사용할 수 있도록하려면 string 보통 – Void

+0

@ user3748798 당신은 변수 이름 또는 C++의'std :: string'을 의미합니까? – syntagma

+0

네, 그렇습니다. – Void

관련 문제