Maison > développement back-end > C++ > le corps du texte

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

Mary-Kate Olsen
Libérer: 2024-10-27 03:22:02
original
429 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!