私は学校のプロジェクトをやっていますが、私は優秀な学年を得るために私の外に出ています
私はボイドポインタとタイプキャストを使ってできるだけ一般的なシナリオのタイプはそれに投げる。voidポインターが警告を出すのは普通ですか?
私はいくつかのコードを実行し、それを行う必要があるすべてのことをしますが、コンパイルするときに警告を再構築するときはいつでも警告を表示します。
サイドノート:整数をポインタに戻していますが、ローカルポインタを返すことができない場合は、必要な結果が得られません。
#define VERDADEIRO 1
#define FALSO 0
void * removido(info* tab,int pos)
{
if(strcmp(tab[pos].nome,REMOVIDO) != 0)
{
return FALSO;
}
else
{
return VERDADEIRO;
}
}
void * vazio(info* tab,int pos)
{
if(strcmp(tab[pos].nome,CHAVENULA)!= 0)
{
return FALSO;
}
else
{
return VERDADEIRO;
}
}
int listar(info * tab)
{
int i,c=0,j;
for(i=0;i<HASHTAM;i++)
{
if((int *)removido(tab,i) ==FALSO && (int *)vazio(tab,i)==FALSO)
{
printf("Nome: %s",tab[i].nome);
printf("NIF: %d\n",tab[i].NIF);
printf("Morada: %s",tab[i].morada);
printf("Telefone: %d\n",tab[i].telefone);
printf("Codigo Postal: %d - %d\n",tab[i].codigopostal/1000,tab[i].codigopostal%1000);
printf("Data de nasicmento: %d - %d - %d\n",tab[i].datanascimento%100,(tab[i].datanascimento%10000)/100,tab[i].datanascimento/10000);
printf("Associado: %s\n",tab[i].infoassociado.associado);
if(associado(tab,i)==VERDADEIRO)
{
for(j=0;j<10;j++)
{
printf("Cota de %d anos atras - Estado: %c\n",j+1,tab[i].infoassociado.cotas[j]);
}
}
c++;
}
}
警告は、ポインタと整数の比較であり、戻り値はキャストなしの整数からポインタを作成します。
どこでも 'void *'を使用しても、コードは「可能な限り一般的」にはなりません。特に、関数が真または偽を返すことを意図している場合は、それを追跡するのが難しくなります。私はあなたの先生であれば、あなたのグレードから、ブールタイプを使用していないため、私は差し引くでしょう。 – StoryTeller
宣言した関数のどちらも、特定の型を明示的に返すので、 'void *'型である必要はありません。できるだけ一般的に*しようとする試みは間違っています。 *このコードをできるだけ不明瞭にしましょう。なぜなら、「ジェネリック」と言うことができるからです。 –
私の先生は、昨年から彼の学生がすべての「空あり*」の番組を作ったところでプレゼンテーションをしていました。彼はそれについて夢中になり、私はブールリターンを使用してこれを簡単に行うことができることを理解しています。 – PeSousa