Cで一般的な比較関数を使用する簡単な例を試してみましたが、初期化すると、初期化時に型に互換性がないという警告メッセージが表示されます。ここで基本的な何かが欠けているように感じます...
#include <stdio.h>
#include <string.h>
int
compare(int (*comp)(void *first, void *second), void *arr, int size)
{
int i, j, dups=0, arrsize=sizeof(arr)/size;
for(i=0; i<arrsize; i++)
{
for(j=0; j<arrsize; j++)
{
if(j!=i)
dups+=(*comp)(&arr[i], &arr[j]);
}
}
return dups;
}
int
compareints(int *first, int *second)
{
if(*first==*second)
return 1;
return 0;
}
int main(int argc, const char * argv[])
{
int (*comp)(void *, void *)=&compareints; //Here is where I get the warning...
int arr[10]={22, 39, 78, 22, 99, 12, 82, 10, 11, 28};
printf("The arr has dups: %d\n", compare(comp, arr, sizeof(int)));
return 0;
}
編集: プログラムが正しく機能しておらず、配列の処理に関係していました。prog を機能させるための変更は以下のとおりです。
int
compare(int (*comp)(void *first, void *second), void **arr, int size)
....
....
....
dups+=(*comp)(arr[i], arr[j]);
int
compareints(....)
if((*((int *)first))==(*((int *)second)))
return 1;
int
main(int argc, const char * argv[])
{
int (*comp)(void *, void *)=&compareints;
int arr[10]={22, 39, 78, 22, 99, 12, 82, 10, 11, 28};
void **arr2=malloc(sizeof(int *)*10);
for(int i=0; i<10; i++)
{
arr2[i]=&arr[i];
}
printf("The arr has dups: %d\n", compare(comp, arr2, 10));
return 0;
}