This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

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;

}NODE;

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

}

NODE *
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.

Parents
  • In fact, writing anything in 'C' is a "convenience feature"!

    Function pointers are "inconvenient" to the 8051 architecture because of the nature of the 8051 architecture; in other architectures, it's no big deal - there is no (significant) penalty and, therefore, no reason not to take advantage of their convenience!

Reply
  • In fact, writing anything in 'C' is a "convenience feature"!

    Function pointers are "inconvenient" to the 8051 architecture because of the nature of the 8051 architecture; in other architectures, it's no big deal - there is no (significant) penalty and, therefore, no reason not to take advantage of their convenience!

Children