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]
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 &).
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.
- 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.