We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
flowing is error,Please help me!! #include <stdio.h> #define NUMBER 2 int max(int a[]) { int z; if(a[0]>a[1]) z=a[0]; else z=a[1]; return(z); } int process(void (* fun)(void *p),void *arg) { int z; z=(int *)(* fun)((int *)arg); return(z); } main() { int a[NUMBER]; int i; int d; for(i=0;i++;i<NUMBER) a[i]=i; d=process(max,a); while(1); }
#include <stdio.h> #define NUMBER 2 int max(int a[]) { int z; if(a[0]>a[1]) z=a[0]; else z=a[1]; return(z); } int process(void (* fun)(void *p),void *arg) { int z; z=(int *)(* fun)((int *)arg);
return(z); } main() { int a[NUMBER]; int i; int d; for(i=0;i++;i<NUMBER) a[i]=i;
d=process(max,a);
while(1); }
Sorry. I said: It appears you have the loop termination expression and the loop iteration expression reversed. That should be test, not termination.
Your code is based on an invalid assumption, and it contains various bugs. Generally speaking, it's almost always an error to cast a function pointer to any other function pointer type. On top of that, the casts you do apply are wrong, here:
int z; z=(int *)(* fun)((int *)arg);
typedef int (*my_fp_type)(int *); int z; z=((my_fp_type)fun)((int *)arg);
Having fixed these problems, be sure to search both the App Notes and the Knowledgebase - the limitations of the 8051 architecture put some serious constraints on the use of function pointers in C51. You will get some very obscure bugs if you don't carefully observe all the precautions...! Search this forum, too.