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.
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!
in other architectures, it's no big deal agreed. Ever so often we see that the "architecture ignorance", which for the PC is not a big deal, carries a heavy penalty in the smaller micros.
it's been a while, but here it is again
The '51 aint no PC
Erik