Maison >développement back-end >C++ >Existe-t-il un équivalent C pour les blocs statiques de Java et comment obtenir un comportement similaire ?

Existe-t-il un équivalent C pour les blocs statiques de Java et comment obtenir un comportement similaire ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-27 03:22:02530parcourir

Is there a C   equivalent for Java's static blocks, and how can similar behavior be achieved?

Blocs statiques en C

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 :

  • Les blocs statiques doivent être placés entre accolades.
  • L'ordre d'exécution du code statique n'est pas garanti en C .
  • Cette approche ne résout pas le fiasco de l'ordre d'initialisation statique.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn