Sintaxe de declaração de função
Funções podem ser globais ou membros de uma classe ou struct.Elas são declaradas usando a seguinte seqüê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 de.
Dentro de uma classe, um recurso opcional friend especificador.
Um especificador de classe de armazenamento opcional.Para funções globais, especificadores de classe de armazenamento permitido são estático e extern.Para funções de membro de classe, extern não é permitido.
Um especificador de função opcional.Para funções globais, o especificador de função só é permitido é embutido. Para funções de membro de classe, virtual e in-line são permitido e, para construtores, explícita.
Um especificador de tipo que indica o tipo de retorno (sujeito a modificações para um tipo de ponteiro ou uma referência pelo uso de * ou &).
O Declarador.
Ponteiro opcional ou modificar o tipo de retorno de operator(s) de referência
Um opcional Microsoft específico modificador especificando a convenção de chamada.Consulte modificadores específicos do Microsoft.
O nome da função.Se a função é um membro de uma classe ou struct, o nome pode ser qualificado usando o operador de resolução de escopo.
A lista de declaração de argumentos entre parênteses ().
Um qualificador de const ou volátil opcional.Nesse contexto, const podem ser usadas somente para membros de classe e é usada para indicar a função não irão modificar os membros da classe de dados.
Se o tipo de retorno é um ponteiro de função, a sintaxe do Declarador pode ser mais complexa, conforme explicado abaixo.
- Uma especificação de exceção opcional que indica qual exceção (ões) que a função lança.Consulte especificações de exceção.
O tipo do identificador, portanto, declarado pode ser construído da seguinte maneira: const ou uma função volátil (se especificada), levando 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;
A declaração de funções retornando ponteiros para funções
É recomendável que typedef ser usadas para declarar um alias para o tipo de ponteiro de função se declarando 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 da função pode ser deduzida a partir a sintaxe declarativa para o ponteiro de função, substituindo o identificador (fp no exemplo acima) com o nome e o argumento lista funções, da seguinte maneira:
int (*myFunction(char* s))(int);
Declaração precedente é equivalente à declaração usando typedef acima.