1.h :
#define CONFLICTINGMACRO(a, b) {doSomething(a, b)}
2.h :
#define CONFLICTINGMACRO(a, b, c) {doSomethingElse(a, b, c)}
을
일부 파일은 두 헤더를 모두 가져 오지만 잘못된 내용 (먼저로드 된 내용)을 찾습니다.
I (재) 다른 기호를 정의하는이 파일은 컴파일러를 통해 프로젝트의 모든 소스 파일에 전 세계적으로 추가됩니다
redefinitions.h라는 파일에서 프로젝트의 (리눅스에서 사용할 수 없습니다 예를 들어, 윈도우 기능 및 유형) 플래그 : 다른 기능의 빠르고 쉬운 디버깅을 위해
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -include redefinitions.h")
(내가 지금 충돌하는 매크로를 필요가 없습니다) 나는 redefinitions.h에 다음 줄을 추가하는 시도 :
#ifdef CONFLICTINGMACRO
#undef CONFLICTINGMACRO
#endif
#define CONFLICTINGMACRO(...) {}
불행히도 이것은 차이를 만드는 것 같지 않습니다. 가장 좋은 추측은 * .h 파일이로드되는 순서와 관련이 있다는 것입니다.
전체 프로젝트에 대해 프로젝트의 다른 헤더 파일에 정의 된 매크로를 무시하는 방법에 대한 아이디어가 있습니까?
아마도'1.h'와'2.h' 파일을 편집 할 수 없습니까? – Smeeheey
불행히도 수천 개의 파일에 퍼져있는 수많은 갈등이 있습니다. (이유를 묻지 말고, 나 자신은 여전히이 엉망으로 다소 깜짝 놀랐습니다 ...) 편집하거나 편집하기위한 스크립트를 작성하는 데에는 상당한 시간이 걸릴 것입니다 (물론 미래에해야 할 일입니다). –
컴파일러에게 특정 (예 : 이름으로) 매크로 정의를 무시하도록 알리는 방법을 모르겠습니다. – Tsyvarev