2009-11-29 2 views
11

나는 현재 받고 있어요 컴파일러 경고를 사용하지. 같은 .... 지금까지 내가 프로그램이 어떤 식 으로든 영향을받지되지 알고부스트 :: 시스템 : (...) _ 카테고리 정의하지만 질문 제목에 준 경고를 닮은

warning: 'boost::system::generic_category' defined but not used

warning: 'boost::system::posix_category' defined but not used

warning: 'boost::system::errno_ecat' defined but not used

warning: 'boost::system::native_ecat' defined but not used

경고. 그러나, 나는 주위에 어슬렁 거리는 경고를 좋아하지 않는다. 그러나 나는이 경고가 나에게 무엇을 정의하려고하고, 부스트와 관련된 것이 사용되지 않는 어딘가에 매달리고 있다는 것을 말하고 있다는 것을 알지 못한다. 그러나 내가 정의한 모든 것을 사용했습니다. 내가 사용중인 부스트 라이브러리는 무작위 라이브러리와 파일 시스템 라이브러리입니다.

경고의 출처를 확인하면 오류 코드의 error_category.hpp 파일이 나타나며 "미리 정의 된 오류 범주"또는 "사용되지 않는 동의어"로 주석 처리 된 일부 static const이 강조 표시됩니다. 어쩌면 문제는 라이브러리를 사용할 때 오류 처리 (또는 부족)와 관련이 있습니까?

사람은 이러한 경고가 터지는 이유에 대한 몇 가지 통찰력을 줄 수 있습니까? 완전히 빠진 것이 있습니까?

P. 경고는 최대 수준입니다.

답변

7

이것은 Boost.System 라이브러리의 ERROR_CODE 라이브러리에 관한 것이다. Boost error_codes에는 값과 카테고리라는 두 가지 속성이 있습니다. 라이브러리 사용자가 자신의 오류 범주를 디자인 할 수 있도록 error_codes를 확장 가능하게 만들기 위해 부스트 디자이너는 고유 한 오류 코드 범주를 나타낼 수있는 방법이 필요했습니다. 간단한 ID 번호로는 충분하지 않습니다. 이는 사용자 정의 오류 범주에 대해 충돌하는 ID 번호를 사용하는 두 개의 프로젝트가 발생할 수 있기 때문입니다.

그래서 기본적으로, 그들이 한 일은 기본 클래스 error_category에서 상속 정적 객체의 형태로 메모리 주소를 사용하는 것이 었습니다. 이러한 변수는 특정 오류 범주의 고유 한 식별자로 사용되는 것을 제외하고는 실제로 아무 것도 수행하지 않습니다. 기본적으로 메모리에 고유 주소가있는 정적 더미 개체이기 때문에 다른 오류 범주 "ID"를 방해하지 않는 사용자 지정 오류 범주를 쉽게 만들 수 있습니다. 자세한 내용은 here을 참조하십시오.

나는 당신이보고있는 것은이 디자인 결정의 부작용이라고 가정하자. 이러한 변수는 프로그램에서 실제로 사용되지 않으므로 컴파일러에서 경고를 생성합니다. 말하기에 충분하다. 나는 네가 나쁜 일을한다고 생각하지 않는다.

+0

동일한 문제가 있지만 링커가 작업을 완료하지 않아서 큰 문제는 내가 볼 수있는 한. – Rhubarb

+12

... – vladr

20

나는 @Charles 샐비어에 동의하지만 적어도 부스트 1.44.0의 등, 이러한 정의는 이제 감싸 추가하고 싶었 -되지 않는 것으로 제외 될 수 있습니다. 따라서 헤더 파일을 사용하지 않으려면 헤더 파일을 포함하기 전에 다음 행을 포함 시키십시오.

#ifndef BOOST_SYSTEM_NO_DEPRECATED 
#define BOOST_SYSTEM_NO_DEPRECATED 1 
#endif 
+0

때문에 더 이상'-Werror'를 사용할 수 없다는 것을 제외하고는 경고를 스퀠 핑하지 않습니다. –

+2

그것은 나를 위해 일했습니다. –

+0

IMO이 대답, 또는이 정의를 지정하려면 -D 컴파일러 플래그를 사용해야합니다. – ColinCren