about error C212 in keilC51

hi: when I compile the below code ,the keil51 emergered a error : error C212: indirect call: parameters do not fit within registers .

source code:

typedef struct NODE{

struct NODE *link; int value;


compare_ints(void const *a,void const *b)
{ if(*(int *)a == *(int *)b) return 0; else return 1;


search_list(NODE *node,void const *value, int(*compare)(void const *,void const *))

while(node != NULL ){

if(compare(&node->value,value)==0)//error point break;

node = node -> link;


return node;


int main()
{ NODE *cur,*root;
int value;

cur = search_list(root,&value,compare_ints);

I can find where the error happen ,I mark with"error point" in the code. the compare() function pointer can not be filled in parameters,or the compile gives an alarm. I don't know why.

More questions in this forum