Escopo do bloco e vínculo interno?

Aug 30 2020

Do padrão C18 (6.7.9):

Se a declaração de um identificador tiver escopo de bloco e o identificador tiver ligação externa ou interna , a declaração não deve ter inicializador para o identificador.

Não tenho nenhum problema com o escopo do bloco + ligação externa. Mas, não consigo ver como um identificador pode ter escopo de bloco e vínculo interno. É mesmo possível?

Respostas

6 JensGustedt Aug 30 2020 at 02:22

Se o seu global estiver definido

static int hui;

tem ligação interna. Então

void f(void) {
    extern int hui;

}

refere-se ao mesmo objeto com ligação interna, mesmo que a palavra-chave diga extern.

Portanto, externé um nome impróprio e provavelmente deveria ser linkage.