Maison >développement back-end >C++ >Existe-t-il un équivalent C pour les blocs statiques de Java et comment obtenir un comportement similaire ?
Question :
En Java, les blocs statiques sont utilisés pour initialiser les membres statiques d'une classe . Cependant, il semble que C ne propose pas une fonctionnalité similaire. Existe-t-il un idiome C qui émule le comportement des blocs statiques Java ?
Réponse :
Bien que les blocs statiques au sens Java n'existent pas en C, il existe un technique pour obtenir un comportement similaire en dehors des cours. Des blocs de code statiques peuvent être implémentés au niveau de l'unité de traduction à l'aide d'une combinaison de macros et de variables factices.
Pour l'initialisation au chargement du processus :
<code class="cpp">static_block { // Initialization code goes here }</code>
Pour l'initialisation lors de l'instanciation de première classe :
<code class="cpp">class StaticInitialized { private: static bool staticsInitialized = false; private: virtual void initializeStatics() = 0; public: StaticInitialized() { if (!staticsInitialized) { initializeStatics(); staticsInitialized = true; } } }; class MyClass : private StaticInitialized { public: static int field1; static int field2; private: void initializeStatics() { // Initialization code goes here } };</code>
La classe de base StaticInitialized garantit que initializeStatics() n'est appelée qu'une seule fois lors de la création de la première instance de MyClass.
Utilisation :
La macro static_block peut être utilisée pour créer des blocs statiques qui s'exécutent avant main().
Implémentation :
L'implémentation implique une variable factice initialisée avec un appel de fonction. Le code du bloc statique est le corps de la fonction. Les macros sont utilisées pour générer des identifiants uniques afin d'éviter les collisions de noms.
Remarques :
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!