Compartilhar via


Parâmetros

Argumentos são nomes de valores passados para uma função por uma chamada de função. Parâmetros são os valores que a função espera receber. Em um protótipo de função, os parênteses que seguem o nome da função contêm uma lista completa dos parâmetros da função e seus tipos. As declarações de parâmetro especificam os tipos, tamanhos e identificadores de valores armazenados nos parâmetros.

Sintaxe

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

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

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 */

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

É parameter-type-list uma sequência de declarações de parâmetro separadas por vírgulas. A forma de cada parâmetro em uma lista de parâmetros tem esta aparência:

register optartype-specifierdeclaratoroptar

Parâmetros de função declarados com o auto atributo geram erros. Os identificadores dos parâmetros são usados no corpo da função para se referir aos valores passados para a função. Você pode nomear os parâmetros em um protótipo, mas os nomes saem do escopo no final da declaração. Isso significa que os nomes de parâmetro podem ser atribuídos da mesma maneira ou de forma diferente na definição de função. Esses identificadores não podem ser redefinidos no bloco mais externo do corpo da função, mas podem ser redefinidos em blocos internos aninhados como se a lista de parâmetros fosse um bloco delimitante.

Cada identificador parameter-type-list deve ser precedido pelo especificador de tipo apropriado, conforme mostrado neste exemplo:

void new( double x, double y, double z )
{
    /* Function body here */
}

Se pelo menos um parâmetro ocorrer na lista de parâmetros, a lista poderá terminar com uma vírgula seguida por três períodos (, ...). Essa construção, chamada de "notação de reticências", indica um número variável de argumentos para a função. Para obter mais informações, consulte Chamadas com um número variável de argumentos. No entanto, uma chamada para a função deve ter pelo menos tantos argumentos quanto há parâmetros antes da última vírgula.

Se nenhum argumento for passado para a função, a lista de parâmetros será substituída pela palavra-chave void. Esse uso é distinto de seu uso como um especificador de void tipo.

A ordem e o tipo de parâmetros, incluindo qualquer uso da notação de reticências, devem ser iguais em todas as declarações de função (se houver) e na definição de função. Os tipos de argumentos após conversões aritméticas habituais devem ser compatíveis com a atribuição com os tipos dos parâmetros correspondentes. (Consulte conversões aritméticas habituais para obter informações sobre conversões aritméticas.) Os argumentos após as reticências não são verificados. Um parâmetro pode ter qualquer tipo fundamental, estrutura, união, ponteiro ou matriz.

O compilador executa as conversões aritméticas habituais independentemente em cada parâmetro e em cada argumento, se necessário. Após a conversão, nenhum parâmetro é menor que um inte nenhum parâmetro tem float tipo, a menos que o tipo de parâmetro seja especificado explicitamente como float no protótipo. Isso significa, por exemplo, que declarar um parâmetro como um char tem o mesmo efeito que declará-lo como um int.

Consulte também

Definições de função C