Partilhar via


Sintaxe de declaração da função

As funções podem ser globais ou membros de uma classe ou struct. Elas são declaradas usando a seguinte sequência:

[friend] [storage-class-specifier] [function-specifier]
[[cv-qualifer] type-specifier] declarator [cv-qualifer] 
[exception-spec]
[friend] [storage-class-specifier] [function-specifier]
[[cv-qualifer] type-specifier] [*|&] [ms-modifer] identifier 
( argument-list ) [cv-qualifer] [exception-spec]
  1. O especificador de declaração. Consulte Especificadores.

    • Em uma classe, um especificador friend opcional.

    • Um especificador de classe de armazenamento opcional. Para funções globais, os especificadores de classe de armazenamento permitidos são static e extern. Para funções de membro de classe, extern não é permitido.

    • Um especificador de função opcional. Para funções globais, o único especificador de função permitido é inline. Para funções de membro da classe, virtual e inline são permitidos, e para construtores, explicit.

    • Um especificador de tipo que indica o tipo de retorno (sujeito à modificação a um ponteiro ou a um tipo de referência pelo uso de * ou &).

  2. O declarador.

    • Operador(es) opcional(is) de ponteiro ou referência que modifica(m) o tipo de retorno

    • Um modificador específico opcional da Microsoft que especifica a convenção de chamada. Consulte Modificadores específicos da Microsoft.

    • O nome da função. Se a função for membro de uma classe ou struct, o nome poderá ser qualificado usando o operador de resolução de escopo.

    • A lista de declarações de argumento entre parênteses ().

    • Um const opcional ou um qualificador volátil. Nesse contexto, const pode ser usado somente para membros de classe, e é usado para indicar que a função não modificará membros de dados da classe.

Se o tipo de retorno for um ponteiro de função, a sintaxe do declarator poderá ser mais complexa, conforme explicado abaixo.

  1. Uma indicação opcional da especificação de exceção indicando quais exceções a função gera. Consulte Especificações de exceção.

O tipo do identificador declarado pode ser construído da seguinte maneira: função const ou volatile (se especificada), usando a lista de argumentos especificados, retornando o tipo indicado pelo especificador de declaração.

O exemplo a seguir mostra duas declarações de função simples:

char *strchr( char *dest, char *src );
static int atoi( const char *ascnum ) const;

Declarando funções que retornam ponteiros para funções

É recomendável que typedef seja usado para declarar um alias para o tipo de ponteiro de função se for declarar uma função que retorna um tipo de ponteiro de função. Por exemplo

typedef int (*fp)(int);
fp myFunction(char* s); // function returning function pointer

Se isso não for feito, a sintaxe adequada para a declaração de função pode ser deduzida da sintaxe do declarador para o ponteiro de função substituindo o identificador (fp no exemplo acima) pelo nome das funções e a lista de argumentos, como segue:

int (*myFunction(char* s))(int);

A declaração anterior é equivalente à declaração que usa typedef acima.

Consulte também

Referência

Declarações de função