ron_lima
(usa Slackware)
Enviado em 15/03/2009 - 23:12h
Vamos lá. O seu protótipo, ao contrário do que a grande maioria das pessoas acredita, não precisa ter os identificadores das variáveis. Basta conter as definições dos tipos:
void inclusao(char [21], int);
Na definição da função é necessário descrever os identificadores. Esse é um efeito da premissa dos protótipos: identificar os tipos de retorno e de aquisição de dados via parâmetros. Para o compilador, não interessa os identificadores. É prática comum manter os identificadores dos parâmetros por uma questão de documentação de código.
O fato é que os identificadores, caso mantidos nos protótipos das funções, devem seguir as regras que governam os identificadores da linguagem. O operador "." é utilizado para dar acesso a um campo de uma estrutura de dados, onde a primeira parte é o identificador da estrutura e a segunda o nome do campo acessado.
A forma como você declarou os parâmetros da sua função "inclusao" está completamente errada, visto que não são identificadores válidos. Um identificador não pode conter operadores e foi exatamente isso o que você fez: declarou dois parâmetros com operadores como parte dos identificadores.
Com relação ao tamanho dos vetores, é prática também definir os tamanhos por meio de constantes literais. Por exemplo, o tamanho do campo nome poderia ser definido como sendo:
#define NOME_LEN 20
A declaração do campo nome ficaria:
struct nodo{
char nome[NOME_LEN + 1];
int idade;
struct nodo *elo; /* struct do mesmo tipo */
};
A declaração do campo nome também é um dialeto comum. Você poderia muito bem definir a constante NOME_LEN como tendo 21 posições e ignorar o "+ 1" na declaração. Porém, é um dialeto comum definir o tamanho dos campos como constantes "justas", deixando o ajuste do '\ 0' para a declaração das variáveis. Esse dialeto é muito interessante por permitir que você manipule os dados usando as constantes em situações nas quais você não vai levar em conta o '\ 0'. Por exemplo:
if (strlen (nome) == NOME_LEN) {
/*...*/
}
Bem, espero ter podido ajudar com sua dúvida.