Wie kann ich eine Verzögerung im Golang-Stil in C erreichen?

DDD
Freigeben: 2024-11-02 01:26:31
Original
545 Leute haben es durchsucht

How Can I Achieve Golang-Style Defer in C  ?

Golang-Style Defer in C verstehen

Einführung:

In C das Konzept Die verzögerte Ausführung bietet, ähnlich wie Golangs Defer, eine bequeme Möglichkeit, Code auszuführen, nachdem eine bestimmte Funktion oder zurückgegeben hat Exits.

STL- und Bibliotheksimplementierungen:

Ab C 14 und höher bieten die Standard Template Library (STL) oder andere Bibliotheken wie Boost keine direkte Implementierung des verzögerten Ausführungsmusters. Es stehen jedoch mehrere Bibliotheken und Techniken von Drittanbietern zur Verfügung, um diese Funktionalität zu erreichen.

Benutzerdefinierte Implementierung:

Das bereitgestellte Code-Snippet bietet eine einfach zu bedienende Lösung ohne Overhead. zu verwendende Implementierung von defer:

<code class="cpp">#ifndef defer
struct defer_dummy {};
template <class F> struct deferrer { F f; ~deferrer() { f(); } };
template <class F> deferrer<F> operator*(defer_dummy, F f) { return {f}; }
#define DEFER_(LINE) zz_defer##LINE
#define DEFER(LINE) DEFER_(LINE)
#define defer auto DEFER(__LINE__) = defer_dummy{} *[&]()
#endif // defer</code>
Nach dem Login kopieren

Verwendung:

Um diese Implementierung zu verwenden, platzieren Sie defer einfach vor dem Codebereich, den Sie ausführen möchten, nachdem die Funktion beendet wurde:

<code class="cpp">defer {
   // Code to be executed after the function returns
};</code>
Nach dem Login kopieren

Beispiel:

Das folgende Beispiel zeigt, wie man dies verwendet Implementierung zum Öffnen und Lesen einer Datei verzögern und die Datei automatisch schließen, wenn der Bereich beendet wird:

<code class="cpp">#include <cstdint>
#include <cstdio>
#include <cstdlib>

bool read_entire_file(char *filename, std::uint8_t *&data_out,
                      std::size_t *size_out = nullptr) {
    ...

    defer { std::fclose(file); }; // Automatically close the file

    ...
}</code>
Nach dem Login kopieren

Vorteile:

Diese Implementierung bietet mehrere Vorteile gegenüber anderen Ansätzen:

  • Kein Overhead, ohne zusätzlichen Laufzeit-Overhead
  • Syntaktisch einfacher und einfacher zu verwenden
  • Keine Abhängigkeiten, reduzierte Kompilierzeiten
  • Kann problemlos überall in der Codebasis eingefügt werden

Fazit:

Diese benutzerdefinierte Defer-Implementierung bietet eine bequeme und effiziente Möglichkeit, eine verzögerte Ausführung in C zu erreichen, und stellt eine ähnliche Funktionalität wie das Schlüsselwort defer von Golang bereit, ohne dass dies erforderlich ist für benutzerdefinierte Klassen oder zusätzliche Abhängigkeiten.

Das obige ist der detaillierte Inhalt vonWie kann ich eine Verzögerung im Golang-Stil in C erreichen?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!