Compartilhar via


Definições de função C

Uma definição de função especifica o nome da função, os tipos e o número de parâmetros que espera receber e seu tipo de retorno. Uma definição de função também inclui um corpo de função com as declarações de suas variáveis locais e as instruções que determinam o que a função faz.

Sintaxe

translation-unit:
external-declaration
translation-unit external-declaration

external-declaration: /* Permitido somente no escopo externo (arquivo) */
function-definition
declaration

function-definition:
declaration-specifiers optarattribute-seqoptardeclaratordeclaration-listoptarcompound-statement

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

Os parâmetros de protótipo são:

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

declaration-list:
declaration
declaration-list declaration

declarator:
pointer optardirect-declarator

direct-declarator: /* Um declarador de função */
direct-declarator ( parameter-type-list ) /* Declarador de novo estilo */
direct-declarator ( identifier-list optar) /* Declarador de estilo obsoleto */

A lista de parâmetros em uma definição usa esta sintaxe:

parameter-type-list: /* A lista de parâmetros */
parameter-list
parameter-list , ...

parameter-list:
parameter-declaration
parameter-list , parameter-declaration

parameter-declaration:
declaration-specifiers declarator
declaration-specifiers abstract-declarator optar

A lista de parâmetros em uma definição de função de estilo antigo usa essa sintaxe:

identifier-list: /* Usado em definições e declarações de função de estilo obsoleto */
identifier
identifier-list , identifier

A sintaxe do corpo da função é:

compound-statement:
{ declaration-list optarstatement-listoptar}

Os únicos especificadores de classe de armazenamento que podem modificar uma declaração de função são extern e static. O extern especificador significa que a função pode ser referenciada de outros arquivos; ou seja, o nome da função é exportado para o vinculador. O static especificador significa que a função não pode ser referenciada de outros arquivos; ou seja, o nome não é exportado pelo vinculador. Se nenhuma classe de armazenamento aparecer em uma definição de função, extern será assumida. De qualquer forma, a função é sempre visível do ponto de definição até o final do arquivo.

Os conjuntos opcionais declaration-specifiers e obrigatórios declarator especificam o tipo de retorno e o nome da função. É declarator uma combinação do identificador que nomeia a função e os parênteses após o nome da função. O não-terminal opcional attribute-seq é um recurso específico da Microsoft definido em Atributos de Função.

A direct-declarator (na declarator sintaxe) especifica o nome da função que está sendo definida e os identificadores de seus parâmetros. Se incluir direct-declarator um parameter-type-list, a lista especificará os tipos de todos os parâmetros. Esse declarador também serve como um protótipo de função para chamadas posteriores à função.

Um declaration nas declaration-list definições de função in não pode conter um storage-class-specifier diferente de register. A type-specifier sintaxe na declaration-specifiers sintaxe só poderá ser omitida se a register classe de armazenamento for especificada para um valor de int tipo.

É compound-statement o corpo da função que contém declarações de variável local, referências a itens declarados externamente e instruções.

As seções Atributos de Função, Classe de Armazenamento, Tipo de Retorno, Parâmetros e Corpo da Função descrevem os componentes da definição da função em detalhes.

Consulte também

Funções