了解更多知识请点我:学习C语言之路(汇总篇)
个人校验器书写程序找问题
#include <stdio.h>
#include <stdbool.h>
#define newRangeChecker(min,max) {(RangeChecker),(min),(max)}
#define newOddChecker(odd) {(OddChecker),(odd)}
typedef bool (const* CHECKER)(void *checker,int value);
typedef struct{
CHECKER checker;
int min;
int max;
}CHECKERSTRUCT;
typedef struct{
CHECKER checker;
int odd;
}ODDCHECKER;
bool RangeChecker(void *pdate,int value)
{
CHECKERSTRUCT temp = (CHECKERSTRUCT *)pdate;
return (temp.min < value && temp.max > value);
}
bool OddChecker(void *pdate,int value)
{
ODDCHECKER temp = (ODDCHECKER *)pdate;
return (temp.odd % 2);
}
void CheckerExecute(void *pdata,int value)
{
CHECKER temp = (CHECKER)pdata;
return temp(&pdata,value);
}
int main()
{
CHECKERSTRUCT chcker = newRangeChecker(1,10);
printf("chcker = %d\n",CheckerExecute(&chcker,4));
}
- 问题一:
错误:typedef bool (const* CHECKER)(void *checker,int value);
改为:typedef bool (*const CHECKER)(void *checker,int value); - 问题二:
错误:CHECKERSTRUCT temp = (CHECKERSTRUCT *)pdate;
改为:CHECKERSTRUCT *temp = (CHECKERSTRUCT *)pdate;
因为结构体不是指针 - 问题三:
错误:CHECKERSTRUCT temp = (CHECKERSTRUCT *)pdate;
改为:CHECKERSTRUCT *temp = (CHECKERSTRUCT *)pdate;
因为结构体不是指针 - 问题四:
错误:CHECKER temp = (CHECKER)pdata;
改为:CHECKER temp = * ((CHECKER *)pdata);
这个我也不知道为什么,求助个为大佬解释下!!!!!!
改完后:
#include <stdio.h>
#include <stdbool.h>
#define newRangeChecker(min,max) {(RangeChecker),(min),(max)}
#define newOddChecker(odd) {(OddChecker),(odd)}
typedef bool (*const CHECKER)(void *checker,int value);
typedef struct{
CHECKER checker;
int min;
int max;
}CHECKERSTRUCT;
typedef struct{
CHECKER checker;
int odd;
}ODDCHECKER;
bool RangeChecker(void *pdate,int value)
{
CHECKERSTRUCT *temp = (CHECKERSTRUCT *)pdate;
return (temp->min < value && temp->max > value);
}
bool OddChecker(void *pdate,int value)
{
ODDCHECKER *temp = (ODDCHECKER *)pdate;
return (temp->odd % value == 0);
}
bool CheckerExecute(void *pdata,int value)
{
CHECKER temp = *((CHECKER*)pdata);
return temp(pdata,value);
}
int main()
{
CHECKERSTRUCT chcker = newRangeChecker(1,10);
ODDCHECKER oddchecker = newOddChecker(3);
printf("chcker = %d\n",CheckerExecute(&chcker,4));
printf("chcker = %d\n",CheckerExecute(&oddchecker,6));
}
运行结果: