Partilhar via


Classe de armazenamento

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

Sintaxe

function-definition:
declaration-specifiersopt attribute-seqopt declarator declaration-listopt compound-statement

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

declaration-specifiers:
storage-class-specifier declaration-specifiersopt
type-specifier declaration-specifiersopt
type-qualifier declaration-specifiersopt

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

Se uma definição de função não incluir um storage-class-specifier, a classe de armazenamento será extern por 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á o mesmo vínculo de qualquer declaração visível do identificador com o escopo de arquivo. Se não há nenhuma declaração visível com escopo de arquivo, o identificador tem uma 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. Para obter mais informações sobre vinculação e escopo de arquivo, confira Tempo de vida, escopo, visibilidade e vinculação.

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 é visível apenas no arquivo de origem no qual é definida. Todas as outras funções, que receberam a classe de armazenamento extern explicitamente ou implicitamente, são visíveis em todos os arquivos de origem no 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.

Seção específica 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.

Quando compiladas com a opção do compilador /Ze, as funções declaradas em um bloco usando a palavra-chave extern têm visibilidade global, o que não ocorre na compilação com /Za. Não confie nesse recurso se a portabilidade do código-fonte for uma consideração importante.

Fim da seção específica da Microsoft

Confira também

Definições de função C