Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Uma definição de função especifica o nome da função, os tipos e o número de parâmetros que ela 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 apenas no âmbito externo (ficheiro) */
function-definition
declaration
function-definition:
declaration-specifiers
attribute-seq
optar pordeclaratordeclaration-listoptar poroptar porcompound-statement
/*
attribute-seq é específico da Microsoft */
Os parâmetros do protótipo são:
declaration-specifiers:
storage-class-specifier
declaration-specifiers
optar por
type-specifier
declaration-specifiers
optar por
type-qualifier
declaration-specifiers
optar por
declaration-list:
declaration
declaration-list
declaration
declarator:
pointer
opte pordirect-declarator
direct-declarator: /* Um declarador de função */
direct-declarator
(
parameter-type-list
) /* Declarador de novo estilo */
direct-declarator
(
identifier-list
)
optar por /* 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 por
A lista de parâmetros em uma definição de função de estilo antigo usa esta sintaxe:
identifier-list: /* Utilizado em definições e declarações de funções de estilo obsoleto */
identifier
identifier-list
,
identifier
A sintaxe para o corpo da função é:
compound-statement:
{
declaration-list
statement-list
optar poroptar por}
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 a partir 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. Em qualquer caso, a função é sempre visível do ponto de definição até o final do arquivo.
O opcional declaration-specifiers e o obrigatório declarator juntos especificam o tipo de retorno e o nome da função. 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.
O direct-declarator (na declarator sintaxe) especifica o nome da função que está sendo definida e os identificadores de seus parâmetros. Se o direct-declarator inclui um parameter-type-list, a lista especifica os tipos de todos os parâmetros. Tal declarador também serve como um protótipo de função para chamadas posteriores para a função.
A 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 in pode declaration-specifiers ser omitida somente se a register classe de armazenamento for especificada para um valor de int tipo.
O compound-statement é o corpo da função que contém declarações de variáveis locais, 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 de função em detalhes.