"Unused variable x" 경고를 억제하는 가장 좋은 방법은 무엇입니까?
"Unused variable x" 경고와 같은 컴파일러(이 경우 GCC)를 억제하는 최선의/최신 방법은 무엇입니까?
GCC에 특정 플래그를 부여하여 이러한 경고를 모두 제거하고 싶지는 않습니다.단, 특별한 경우만 해당됩니다.
변수에 이름 지정 안 함(C++)
void foo(int /*bar*/) {
...
}
컴파일러 고유의 비표준 메커니즘을 사용하여 컴파일러에 알립니다.
자세한 내용은 개별 답변을 참조하십시오.__attribute__((unused))
,여러가지#pragma
등입니다.필요에 따라 이동성을 위해 프리프로세서 매크로를 랩합니다.
경고를 끕니다.
IDE는 사용하지 않는 변수를 시각적으로 표시할 수 있습니다(다른 색상 또는 밑줄).그렇기 때문에 컴파일러의 경고는 무용지물이 될 수 있습니다.
GCC 및 Clang에서 추가-Wno-unused-parameter
명령줄 끝에 있는 옵션(사용하지 않는 파라미터 경고를 켜는 모든 옵션 뒤에 있음)-Wall
,-Wextra
).
무효에 깁스 추가
void foo(int bar) {
(void)bar;
}
제임스들린의 답변과 메일백에 따르면: 컴파일러 경고 종료 중.
(void) variable
일부 컴파일러에서는 동작할 수 있습니다.
C++ 코드에 대해서는, 메일 백을 참조해 주세요. Herb Sutter가 권장하는 컴파일러 경고 셧다운
template<class T> void ignore( const T& ) { }
...
ignore(variable);
저는 http://sourcefrog.net/weblog/software/languages/C/unused.html,이라는 기사를 발견했는데, 미사용에 대해 설명하고 있습니다.저자가 사용하지 않는 변수 이름도 망가지기 때문에 앞으로는 실수로 사용할 수 없다는 점이 흥미롭다.
발췌:
#ifdef UNUSED
#elif defined(__GNUC__)
# define UNUSED(x) UNUSED_ ## x __attribute__((unused))
#elif defined(__LCLINT__)
# define UNUSED(x) /*@unused@*/ x
#else
# define UNUSED(x) x
#endif
void dcc_mon_siginfo_handler(int UNUSED(whatsig))
#pragma unused <variable>
매우 해킹적인 해결책이지만 변수를 자신에게 할당해 보십시오.
대부분의 컴파일러들이 변수가 사용되었다고 생각하도록 속일 것이라고 생각합니다.휴대성도 좋을 것 같아요.
void로의 캐스트는 변수를 코드에 "우연하게" 보관하지 않았음을 보여주기 때문에 최선의 방법입니다.즉, 이 함수는 동일한 파라미터 유형과 반환 유형을 필요로 하는 함수 포인터의 테이블을 가지고 있을 수 있지만 이 테이블엔트리에서 파라미터를 사용하지 않습니다.
즉, 필요없으면 버리세요.;)
이것이 정말로 필요한 경우, 다음과 같은 미사용 속성(GCC 한정)을 사용할 수 있습니다.
void foo(int __attribute__((__unused__)) bar) {
...
}
물론 함수 매개 변수뿐만 아니라 실제로 모든 입력이 필요하지 않은 API의 콜백 함수일 수 있기 때문에 가장 일반적인 사용 사례입니다.
또한 GLib에는 G_GNUC_UNUSED 매크로가 있으며, 그 속성으로 확장된다고 생각합니다.
는 하다를 사용해서 으로 할 수 .#pragma
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunused"
int unususedVariable = 1;
#pragma clang diagnostic pop
를 하고 있는 는, GCC 를 사용해 .#pragma gcc ...
사용되지 않은 변수 선언을 코드에서 삭제합니다(pun intended).
(뭐라고?)이것이 제가 하는 일입니다.명백한 것이 최선의 해결책이라고 지적합니다.)
다른 답변에 대한 코멘트를 보면 매크로에서 생성된 쓰레기로 보입니다.음, 그건 흉막이야.
솔루션:
- 해당 매크로가 실제로 사용되는 경우에만 변수를 선언하는 경우 #로 리팩터링합니다.
- 사용하지 않는 변수 생성을 건너뛰는 다른 버전의 매크로를 만듭니다.
- 게다가 코드에 문제를 일으키는 매크로를 사용하지 않는 것이 좋습니다.
사용 중이고 프로젝트를 발송하는 경우 삭제합니다.최악이야, 댓글 달아라
자신에게 할당합니다.
void f(int unused) {
unused = unused;
}
GCC에서 작동하지만 Clang은 -Wno-self-assign이 필요합니다.
무효로 캐스팅하는 것이 가장 휴대용 솔루션이라고 생각합니다. 모두 GCC의 완전한 이를 .완전 경고에도 불구하고-W{all,extra,pedantic}
:
(void)unused;
언급URL : https://stackoverflow.com/questions/3417837/what-is-the-best-way-to-suppress-a-unused-variable-x-warning
'programing' 카테고리의 다른 글
Android ClassNotFoundException:경로에서 클래스를 찾을 수 없습니다. (0) | 2022.11.13 |
---|---|
현재 스크립트 디렉토리를 올바르게 판별하려면 어떻게 해야 합니까? (0) | 2022.11.13 |
SQL을 INSERT IN...과(와) 함께 사용할 때 오류 1064가 발생합니다.선택...중복 키 업데이트 시 (0) | 2022.11.13 |
@Transactional on class와 메서드의 차이점은 무엇입니까? (0) | 2022.11.13 |
Apache는 php 파일을 표시하는 대신 다운로드하고 있습니다. (0) | 2022.11.13 |