사용하지 않는 변수 경고를 끄기 위해 gcc 컴파일러에 어떤 스위치를 전달하는지 알고 싶습니다. Windows의 부스트에서 오류가 발생하고 부스트 코드를 만지고 싶지 않습니다.
C:\boost_1_52_0/boost/system/error_code.hpp: At global scope:
C:\boost_1_52_0/boost/system/error_code.hpp:214:36: error: 'boost::system::posix_category' defined but not used [-Werror=unused-variable]
C:\boost_1_52_0/boost/system/error_code.hpp:215:36: error: 'boost::system::errno_ecat' defined but not used [-Werror=unused-variable]
C:\boost_1_52_0/boost/system/error_code.hpp:216:36: error: 'boost::system::native_ecat' defined but not used [-Werror=unused-variable]
나는 모두를 사용하여 시도하지 -Wunused-value
하고 -Wno-unused-value
있지만, 어느 쪽도 위의 메시지를 억제.
올바른 명령은 무엇입니까? 다음은 내 컴파일 라인입니다.
g++ -g -fno-inline -Wall -Werror -Wextra -Wfloat-equal -Wshadow
-Wpointer-arith -Wcast-qual -Wcast-align -Wwrite-strings -Wno-conversion
-Wdisabled-optimization -Wredundant-decls -Wunused-value -Wno-deprecated
-IC:\\boost_1_52_0 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64
-c -o op.o op.cpp
아마도 -Wall
내 목표를 무시할까요?
답변
-Wno-unused-variable
스위치는 일반적으로 트릭을 수행합니다. 그러나 프로젝트에서 이러한 사항에 관심이 있다면 실제로 매우 유용한 경고입니다. GCC가 코드에없는 것에 대해 경고하기 시작하면 짜증이납니다.
경고를 유지하는 것이 좋지만 타사 프로젝트의 포함 디렉토리 -isystem
대신 사용하는 것이 좋습니다 -I
. 이 플래그는 GCC에게 사용자가 제어 할 수없는 항목에 대해 경고하지 않도록 지시합니다.
예를 들어 대신 -IC:\\boost_1_52_0
이라고 말하십시오 -isystem C:\\boost_1_52_0
.
도움이되기를 바랍니다. 행운을 빕니다!
답변
때로는 일부 경고 만 억제하고 다른 경고는 유지하고 싶을 때가 있습니다. 코드에서 GCC의 unused 속성 을 사용하여 변수 및 공식 매개 변수에 대한 경고를 억제 할 수 있습니다 . 다음 코드 조각이 있다고 가정 해 보겠습니다.
void func(unsigned number, const int version)
{
unsigned tmp;
std::cout << number << std::endl;
}
이 함수를 핸들러로 사용해야하는 상황이있을 수 있습니다. (imho) C ++ Boost 라이브러리에서 매우 일반적입니다. 그런 다음 두 번째 형식 매개 변수 버전 이 필요 하므로 함수의 시그니처가 핸들러에 필요한 템플릿과 동일합니다. 그렇지 않으면 컴파일이 실패합니다. 그러나 함수 자체에서도 실제로 필요하지 않습니다.
경고에서 제외 할 변수 또는 형식 매개 변수를 표시하는 방법은 다음과 같습니다.
void func(unsigned number, const int version __attribute__((unused)))
{
unsigned tmp __attribute__((unused));
std::cout << number << std::endl;
}
GCC에는 다른 많은 매개 변수가 있으며 매뉴얼 페이지 에서 확인할 수 있습니다 . 이것은 C ++뿐만 아니라 C 프로그램에서도 작동하며 핸들러뿐만 아니라 거의 모든 함수에서 사용할 수 있다고 생각합니다. 어서 사용해보세요! 😉
추신 : 최근에 다음과 같은 템플릿에서 Boosts의 직렬화 경고를 억제하기 위해 이것을 사용했습니다.
template <typename Archive>
void serialize(Archive &ar, const unsigned int version __attribute__((unused)))
편집 : 분명히, 나는 당신이 필요로 당신의 질문에 대답하지 않았고, drak0sha 가 더 잘했습니다. 나는 주로 질문의 제목을 따랐기 때문입니다. 바라건대, 이것은 그 제목 때문에 여기에 오는 다른 사람들에게 도움이 될 수 있습니다 … 🙂
답변
gcc를 사용 중이고 선택한 코드에 대한 경고를 비활성화하려면 #pragma 컴파일러 지시문을 사용할 수 있습니다.
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-variable"
( your problematic library includes )
#pragma GCC diagnostic pop
제어하는 코드의 경우 __attribute__((unused))
특정 변수가 사용되지 않음을 컴파일러에 지시하는 데 사용할 수도 있습니다.
답변
man gcc
경고 옵션 아래를 참조하십시오 . 거기에 당신은unused
경고 옵션
… -Wunused -Wunused-function -Wunused-label -Wunused-parameter -Wunused-value -Wunused-variable -Wunused-but-set-parameter -Wunused-but-set-variable
접두사에을 no-
붙이면이 경고가 비활성화됩니다.
많은 옵션에는 -f 또는 -W —로 시작하는 긴 이름이 있습니다 (예 : -fmove-loop-invariants, -Wformat 등). 이들 대부분은 긍정적 인 형태와 부정적인 형태를 모두 가지고 있습니다. -ffoo의 음수 형식은 -fno-foo입니다. 이 설명서는이 두 가지 양식 중 하나만 기본값이 아닌 양식 만 문서화합니다.
더 자세한 설명은 경고 요청 또는 억제 옵션에서 찾을 수 있습니다.
답변
사용 -Wno-unused-variable
이 작동합니다.
답변
컴파일러는 이미 말하고 value
있지만 variable
. 을 찾고 있습니다 -Wno-unused-variable
. 또한 g++ --help=warnings
사용 가능한 옵션 목록을 확인하십시오.
답변
gcc에서 나오는 사용하지 않는 변수 경고를 어떻게 비활성화합니까?
Windows의 부스트에서 오류가 발생하고 부스트 코드를 만지고 싶지 않습니다.
Boost의 Trac을 방문하여 Boost에 대한 버그 보고서를 제출합니다.
애플리케이션은 라이브러리 경고 및 오류를 지우는 책임이 없습니다. 라이브러리는 자체 경고 및 오류를 지울 책임이 있습니다.