Partilhar via


Classe de armazenamento

O especificador de classe de armazenamento em uma definição de função fornece a função ou externstatic a classe de armazenamento.

Sintaxe

function-definition:
declaration-specifiers attribute-seq optar pordeclaratordeclaration-listoptar poroptar porcompound-statement

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

declaration-specifiers:
storage-class-specifier declaration-specifiers optar por
type-specifier declaration-specifiers optar por
type-qualifier declaration-specifiers optar por

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 assume externcomo padrão . Você pode declarar explicitamente uma função como extern, mas ela não é necessária.

Se a declaração de uma função contiver o storage-class-specifierextern, o identificador terá a mesma ligação que qualquer declaração visível do identificador com o escopo do arquivo. Se não houver nenhuma declaração visível com o escopo do arquivo, o identificador terá ligação externa. Se um identificador tiver escopo de arquivo e não storage-class-specifier, o identificador terá ligação externa. Ligaçã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, consulte Tempo de vida, escopo, visibilidade e vinculação.

Declarações de função de escopo de bloco com um especificador de classe de armazenamento diferente de extern gerar erros.

Uma função com static classe de armazenamento é visível apenas no arquivo de origem no qual está definida. Todas as outras funções, quer recebam extern a classe de armazenamento explícita ou implicitamente, são visíveis em todos os arquivos de origem no programa. Se static a classe de armazenamento for desejada, ela deve 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 estão habilitadas, uma função originalmente declarada sem uma classe de armazenamento (ou com extern classe de armazenamento) recebe static classe de armazenamento se a definição de função estiver no mesmo arquivo de origem e se a definição especificar static explicitamente a classe de armazenamento.

Quando compiladas com a opção de compilador /Ze, as funções declaradas dentro de um bloco usando a palavra-chave têm visibilidade global, o extern que não é verdade ao compilar com /Za. Este recurso não deve ser invocado se a portabilidade do código-fonte for uma consideração.

END Específico da Microsoft

Ver também

Definições de função C