Bloquer la portée et le lien interne?

Aug 30 2020

À partir de la norme C18 (6.7.9):

Si la déclaration d'un identificateur a une portée de bloc et que l'identificateur a un lien externe ou interne , la déclaration ne doit pas avoir d'initialiseur pour l'identificateur.

Je n'ai aucun problème avec la portée de bloc + la liaison externe. Mais, je ne vois pas comment un identifiant peut avoir une portée de bloc et un lien interne. Est-ce que c'est possible?

Réponses

6 JensGustedt Aug 30 2020 at 02:22

Si votre global est défini

static int hui;

il a un lien interne. ensuite

void f(void) {
    extern int hui;

}

fait référence au même objet avec un lien interne, même si le mot-clé dit extern.

C'est donc externun abus de langage et devrait probablement l'être linkage.