Heim > Backend-Entwicklung > C++ > Können wir eine benutzerdefinierte „static_warning'-Funktionalität in C implementieren?

Können wir eine benutzerdefinierte „static_warning'-Funktionalität in C implementieren?

Patricia Arquette
Freigeben: 2024-10-31 02:36:02
Original
563 Leute haben es durchsucht

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

Gibt es eine static_warning?

Frage:

Es ist bekannt, dass Boost sorgt eine Funktion „STATISCHE WARNUNG“. Diese Frage zielt jedoch speziell darauf ab, die Möglichkeit der Implementierung einer benutzerdefinierten static_warning-Funktionalität zu untersuchen, die ähnlich wie static_assert funktioniert, aber zur Kompilierungszeit eine Warnung ausgibt, anstatt die Kompilierung abzubrechen.

Antwort:

Ja, es ist möglich, eine benutzerdefinierte static_warning-Funktion mit GCC oder MSVC zu implementieren. Die Implementierung nutzt das Makro DEPRECATE, um eine Warnung aussendende Funktion zu definieren, und verwendet eine Reihe verschachtelter Makros, um die gewünschte Funktionalität zu erstellen.

Verwendung:

Das benutzerdefinierte static_warning kann wie folgt verwendet werden:

<code class="cpp">STATIC_WARNING(condition, "Warning message here");</code>
Nach dem Login kopieren

Zum Beispiel gibt dieser Code eine Warnung aus:

<code class="cpp">STATIC_WARNING(true, "This warning is intended");</code>
Nach dem Login kopieren

Implementierung:

Die Implementierung basiert auf Makros, um das gewünschte Verhalten zu erreichen:

<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>
Nach dem Login kopieren

Beispiel:

Bedenken Sie den folgenden Code:

<code class="cpp">STATIC_WARNING(1 == 1, "This is not a warning");
STATIC_WARNING(1 != 1, "This should generate a warning");</code>
Nach dem Login kopieren

Bei Kompilierung mit der entsprechenden Warnstufe löst die zweite Zeile eine Warnung aus.

Das obige ist der detaillierte Inhalt vonKönnen wir eine benutzerdefinierte „static_warning'-Funktionalität in C implementieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage