programing

"Unused variable x" 경고를 억제하는 가장 좋은 방법은 무엇입니까?

sourcejob 2022. 11. 13. 19:30
반응형

"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

반응형