문제

나는 현재 질문 제목에 준 경고와 비슷한 컴파일러 경고를 받고 있습니다. ...와 같은 경고 ....

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

내가 아는 한 프로그램은 어떤 식 으로든 영향을받지 않습니다. 그러나, 나는 경고가 매달려있는 것을 좋아하지 않지만, 이러한 경고가 무엇을 말하려고하는지 전혀 모른다. 그러나 내가 정의한 모든 것은 내가 사용했습니다. 내가 사용하는 부스트 라이브러리는 랜덤 라이브러리와 파일 시스템 라이브러리입니다.

경고 소스를 확인하면 boost의 error_category.hpp 파일을 불러 일으키고 일부를 강조 표시합니다. static const"사전 정의 된 오류 범주"또는 "감가 상각 된 동의어"로 주석을 달았습니다. 도서관을 사용할 때 문제가 오류 처리 (또는 부족)와 관련이 있습니까?

이 경고가 왜 나타나는지에 대한 통찰력을 줄 수 있습니까? 내가 뭔가를 완전히 놓치고 있습니까?

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

도움이 되었습니까?

해결책

이것은 boost.system 라이브러리의 Error_code 라이브러리와 관련이 있습니다. 부스트 ERROR_CODES에는 값과 범주의 두 가지 속성이 포함되어 있습니다. 라이브러리 사용자가 고유 한 오류 범주를 설계 할 수 있도록 Error_Codes를 확장 할 수 있도록하기 위해 Boost Designers는 고유 한 오류 코드 범주를 나타내는 방법이 필요했습니다. 간단한 ID 번호로는 충분하지 않습니다. 이로 인해 사용자 지정 오류 범주에 ID 번호가 상충되는 두 프로젝트가 발생할 수 있기 때문입니다.

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

나는 당신이보고있는 것이이 설계 결정의 부작용이라고 생각합니다. 이러한 변수는 실제로 프로그램에 사용되지 않으므로 컴파일러는 경고를 생성합니다. 말하면 충분합니다. 나는 당신이 잘못하고 있다고 생각하지 않습니다.

다른 팁

나는 @Charles Salvia에 동의하지만 적어도 Boost 1.44.0의 경우 이러한 정의는 이제 감가 상각 된 것으로 제외되어 래핑된다고 덧붙이고 싶었습니다. 따라서 사용하지 않는 경우 헤더 파일을 포함하기 전에 다음 줄만 포함하십시오.

#ifndef BOOST_SYSTEM_NO_DEPRECATED
#define BOOST_SYSTEM_NO_DEPRECATED 1
#endif

나는 시도했다 BOOST_SYSTEM_NO_DEPRECATED @m.tibbits가 제안했으며, 경고의 일부 인스턴스 (Linux에 구축 된 큰 시스템에서)를 제거하는 것처럼 보였지만 전부는 아닙니다.

그러나 사용 -isystem 대신에 -I 부스트 헤더를 포함시키고 (문제를 무시하는) 나에게 효과가있었습니다.

의 생각 https://exceptionshub.com/how-do-you-disable-bariable-warnings-coming-of-gcc.html

GNU GCC의 설명 (비스듬히) : http://gcc.gnu.org/onlinedocs/gcc/directory-options.html

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top