programing

C 및 C++ 함수 서명에 사용되는 휴대용 USED 매개 변수 매크로

iphone6s 2023. 7. 16. 12:52
반응형

C 및 C++ 함수 서명에 사용되는 휴대용 USED 매개 변수 매크로

사용하지 않는 변수 경고를 제거하기 위한 매크로를 만들고 싶습니다.

이 질문에서는 함수 코드 내부에 매크로를 작성하여 사용되지 않는 매개 변수 경고를 억제하는 방법에 대해 설명합니다.

C/C++에서 사용되지 않은 매크로를 구현하는 범용 컴파일러 독립적인 방법

하지만 함수 서명에 사용할 수 있는 매크로에 관심이 있습니다.

void callback(int UNUSED(some_useless_stuff)) {}

이것은 가 구글(출처)을 이용해서 알아낸 것입니다.

#ifdef UNUSED
#elif defined(__GNUC__)
# define UNUSED(x) UNUSED_ ## x __attribute__((unused))
#elif defined(__LCLINT__)
# define UNUSED(x) /*@unused@*/ x
#elif defined(__cplusplus)
# define UNUSED(x)
#else
# define UNUSED(x) x
#endif

다른 컴파일러에 대해서도 확장이 가능합니까?

편집: 태그 지정의 작동 방식을 이해할 수 없는 사용자를 위해:저는 C와 C++ 모두를 위한 솔루션을 원합니다.그렇기 때문에 이 질문에 C와 C++ 모두 태그가 지정되어 있으며 C++ 전용 솔루션이 허용되지 않는 이유입니다.

제 방식은 다음과 같습니다.

#define UNUSED(x) (void)(x)
void foo(const int i) {
    UNUSED(i);
}

비주얼 스튜디오, 인텔에서 그런 건 문제 없어요gcc그리고.clang.

다른 옵션은 매개 변수를 주석 처리하는 것입니다.

void foo(const int /*i*/) {
  // When we need to use `i` we can just uncomment it.
}

작은 것 하나만 있으면 더 잘 사용할 수 있습니다.__attribute__((__unused__))~하듯이__attribute__((unused))사용되지 않는 것이 매크로로 정의된 어딘가에 있을 수 있기 때문에, 개인적으로 이 상황에 대해 몇 가지 문제가 있었습니다.

하지만 제가 사용하는 속임수는, 제가 더 읽기 쉽다는 것을 알게 된 것입니다.

#define UNUSED(x) (void)x;

그러나 변수와 메서드의 인수에만 사용할 수 있으며 함수 자체에는 사용할 수 없습니다.

테스트를 해보고 댓글을 따라보니 질문에 언급된 원래 버전이 충분히 좋은 것으로 나타났습니다.

사용:#define UNUSED(x) __pragma(warning(suppress:4100)) x(댓글에 언급됨), MSVC에서 C를 컴파일하는 데 필요할 수도 있지만, 너무 이상한 조합이라 결국에는 포함하지 않았습니다.

여러 컴파일러에서 보풀 지원을 제외하고 다음을 사용했습니다.

#if (__GNUC__ > 2) || (__GNUC__ == 2 && __GNUC_MINOR__ > 4)
#       define PGM_GNUC_UNUSED         __attribute__((__unused__))
#else
#       define PGM_GNUC_UNUSED
#endif

테스트된 컴파일러: GCC, Clang, EKOPath, Intel C 컴파일러 / Composer XE, Cygwin / Linux / MSYS의 MinGW32, Cygwin / Linux의 MinGW-w64, Sun ONE Studio / Oracle Solaris Studio, Visual Studio 2008 / 2010.

사용 예:

pgm_tsc_init (
        PGM_GNUC_UNUSED pgm_error_t**   error
        )
{
...
}

PGM는 이 C 기반 프로젝트의 표준 접두사입니다. GNUC이 속성에 대한 GLib의 규약입니다.

내 생각에 한 컴파일이 경고합니다.__attribute__어떤 상황에서는 하지만 확실히 오류는 없습니다.

언급URL : https://stackoverflow.com/questions/7090998/portable-unused-parameter-macro-used-on-function-signature-for-c-and-c

반응형