Maison >développement back-end >Golang >Comment puis-je obtenir un report de style Golang en C ?
Comprendre le Golang-Style Defer en C
Introduction :
En C, le concept d'exécution différée, similaire au defer de Golang, fournit un moyen pratique d'exécuter du code après le retour d'une fonction spécifique ou exits.
Implémentations STL et bibliothèque :
À partir de C 14 et versions ultérieures, la bibliothèque de modèles standard (STL) ou d'autres bibliothèques comme Boost ne fournissent pas d'implémentation directe du modèle d’exécution différée. Cependant, il existe plusieurs bibliothèques et techniques tierces disponibles pour obtenir cette fonctionnalité.
Implémentation personnalisée :
L'extrait de code fourni offre une solution simple et sans surcharge. à utiliser implémentation de différer :
<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>
Utilisation :
À utilisez cette implémentation, placez simplement defer avant la portée du code que vous souhaitez exécuter après la sortie de la fonction :
<code class="cpp">defer { // Code to be executed after the function returns };</code>
Exemple :
L'exemple suivant montre comment utilisez cette implémentation différée pour ouvrir et lire un fichier, en fermant automatiquement le fichier lorsque la portée sorties :
<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>
Avantages :
Cette implémentation offre plusieurs avantages par rapport aux autres approches :
Conclusion :
Cette implémentation de report personnalisée offre une solution pratique et moyen efficace d'obtenir une exécution différée en C , fournissant une fonctionnalité similaire au mot-clé defer de Golang sans avoir besoin de classes personnalisées ou supplémentaires dépendances.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!