Partilhar via


Classe de armazenamento

O especificador storage-class em uma definição de função fornece à função uma classe de armazenamento extern ou static.

Sintaxe

  • function-definition:
    declaration-specifiers opt attribute-seq opt declarator declaration-list opt compound-statement

    /* attribute-seq é específico da Microsoft */

  • declaration-specifiers:
    storage-class-specifier declaration-specifiers opt

    type-specifier declaration-specifiers opt

    type-qualifier declaration-specifiers opt

  • storage-class-specifier: /* Para definições de função */
    extern

    static

Se uma definição de função não inclui um storage-class-specifier, a classe de armazenamento usa extern como padrão. Você pode declarar explicitamente uma função como extern, mas isso não é necessário.

Se a declaração de uma função contiver o storage-class-specifier extern, o identificador terá a mesma vinculação de qualquer declaração visível do identificador com escopo de arquivo. Se não houver declaração visível com escopo de arquivo, o identificador terá vinculação externa. Se um identificador tiver escopo de arquivo e nenhum storage-class-specifier, o identificador terá vinculação externa. Vinculação externa significa que cada instância do identificador denota o mesmo objeto ou função. Consulte Tempo de vida, escopo, visibilidade e vinculação para obter informações sobre vinculação e escopo de arquivo.

As declarações de função block-scope com um especificador storage-class diferente de extern geram erros.

Uma função com a classe de armazenamento static só é visível no arquivo de origem em que é definida. Todas as outras funções, tendo recebido a classe de armazenamento extern de forma explícita ou implícita, são visíveis em todos os arquivos de origem do programa. Se a classe de armazenamento static for desejada, ela deverá ser declarada na primeira ocorrência de uma declaração (se houver) da função, e na definição da função.

Específico da Microsoft

Quando as extensões da Microsoft são habilitadas, uma função originalmente declarada sem uma classe de armazenamento (ou com a classe de armazenamento extern) receberá a classe de armazenamento static se a definição da função estiver no mesmo arquivo de origem e se a definição especificar explicitamente a classe de armazenamento static.

Ao compilar com a opção do compilador /Ze, as funções declaradas em um bloco usando a palavra-chave extern terão visibilidade global. Isso não ocorre na compilação com /Za. Esse recurso não deve ser usado se a portabilidade do código-fonte estiver em consideração.

FIM de Específico da Microsoft

Consulte também

Referência

Definições de função C