2012-03-16 1 views
0

포함 할 라이브러리 중 두 개는 각각의 .h 파일에서 동일한 매크로 정의를 공유합니다. 동일한 정의의 다중 정의 #define 라이브러리의 매크로 정의

#define MAX <some value>  //first definition of MAX in a file 
#define MAX <some other value> //second definition of MAX in a *different* file 

및 편집에

나는

.../httpd.h:43:1: warning: "MAX" redefined 

나는 이러한 헤더의 각을 확인했습니다

.../opencv2/core/types_c.h:272:1: warning: this is the location of the previous definition 

를 얻을, 그들은의 #include 가드를 가지고있다.

이 오류를 수정하는 가장 좋은 방법은 무엇입니까 (오류가 발생하지 않고 다른 -W 플래그로 경고를 표시하지 않음)?

답변

2

이 상황에 대한 유일한 나쁜 부분은 코드에있는 MAX에 대한 것입니다. 아무 것도 없으면 두 #include 사이에 #undef MAX을 추가하는 것이 가장 빠른 픽스 일 것입니다. 일 경우 MAX에 대한 의존성이있는 경우 어떤 것이 있는지 알아야 할 수도 있습니다 (마지막이라고 생각합니다 :-). 적절한 것을하십시오.

1

가드도 컴파일러 플래그도 여기에 포함되지 않습니다. 약 두 가지 가능한 솔루션이 있습니다.

  1. 두 소스가 같은 소스 파일에 들어 있지 않습니다.
  2. 두 개의 중간에 #undef MAX을 추가하십시오.
+1

세 번째 옵션은 소스를 편집하는 것입니다 (너무 오래 걸리지 않아야 함). 또한 bugzilla/mailing list/support에서 불만을 제기합니다. – AoeAoe

2

FYI, Nick, 위의 설명에서 AoeAoe가 언급 한 것처럼 소스를 변경하여 수정했습니다. 단지 httpd.h의 MAX()MIN() 매크로가 사용되는 곳이 httpd.cpp에 있다는 것을 알았 기 때문에, 나는 단지 #defines을 httpd.cpp로 옮겼다.

실제로 MJPG-Streamer 코드에 포함되어있을 수 있으며 Robotis는 Darwin 프레임 워크에 사용하려는 조각을 골라낸 것일 수도 있습니다. 어쨌든, 현재 MJPG - 스 트리머 코드는 MAXMIN 주위 #ifndef 가드가 있으며 단지 httpd.c, here하지 httpd.h에 포함됩니다 별도의 utils.h 파일 here에서 그들을있다.