> 백엔드 개발 > C++ > 본문

C에서 사용자 정의 `static_warning` 기능을 구현할 수 있습니까?

Patricia Arquette
풀어 주다: 2024-10-31 02:36:02
원래의
542명이 탐색했습니다.

Can we implement a custom `static_warning` functionality in C  ?

static_warning이 있나요?

질문:

Boost가 제공하는 것으로 알려져 있습니다. "정적 경고" 기능. 그러나 이 질문의 목적은 static_assert와 유사하게 작동하지만 컴파일을 중단하는 대신 컴파일 시간에 경고를 발행하는 사용자 정의 static_warning 기능을 구현할 가능성을 구체적으로 탐색하는 것입니다.

답변:

예, GCC 또는 MSVC를 사용하여 사용자 정의 static_warning 기능을 구현하는 것이 가능합니다. 구현에서는 DEPRECATE 매크로를 활용하여 경고 표시 기능을 정의하고 일련의 중첩 매크로를 사용하여 원하는 기능을 생성합니다.

사용법:

사용자 정의 static_warning은 다음과 같이 사용하세요:

<code class="cpp">STATIC_WARNING(condition, "Warning message here");</code>
로그인 후 복사

예를 들어, 이 코드는 경고를 발행합니다:

<code class="cpp">STATIC_WARNING(true, "This warning is intended");</code>
로그인 후 복사

구현:

구현은 gewünschten 동작을 달성하기 위해 매크로를 사용합니다.

<code class="cpp">#define DEPRECATE(foo, msg) foo __attribute__((deprecated(msg)))
#define STATIC_WARNING(cond, msg) ...

...

struct true_type {};
struct false_type {};
template<int test> struct converter : public true_type {};
template<> struct converter<0> : public false_type {};

...

STATIC_WARNING(cond, msg) {
  DEPRECATE(void _(const detail::false_type&), msg) {};
  void _(const detail::true_type& ) {};
  PP_CAT(static_warning,__LINE__)() {_(::detail::converter<(cond)>>());}
}</code>
로그인 후 복사

예:

다음 코드를 고려하세요.

<code class="cpp">STATIC_WARNING(1 == 1, "This is not a warning");
STATIC_WARNING(1 != 1, "This should generate a warning");</code>
로그인 후 복사

적절한 경고 수준으로 컴파일하면 두 번째 줄에서 경고가 발생합니다.

위 내용은 C에서 사용자 정의 `static_warning` 기능을 구현할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿