⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 funptrs.c

📁 sdcc是为51等小型嵌入式cpu设计的c语言编译器支持数种不同类型的cpu
💻 C
字号:
/** Function pointer tests.    type: BOOL, char, int, long */#include <testfwk.h>#include <stdbool.h>#ifndef BOOL#define BOOL	bool#endif#define TYPE_{type}/* Must use a typedef as there is no way of adding the code modifier   on the z80.*/typedef void (*NOARGFUNPTR)(void);typedef void (*ONEARGFUNPTR)({type}) REENTRANT;typedef long int (*FOURARGFUNPTR)(char, char, long int, long int) REENTRANT;typedef {type} (*TYPEFUNPTR)({type}, {type}) REENTRANT;int count;FOURARGFUNPTR fafp;TYPEFUNPTR tfp;voidincCount(void){  count++;}voidincBy({type} a) REENTRANT{  count += a;}long int f6(char a, char b, long int c, long int d) REENTRANT{  switch (a)    {    case 0: return a;    case 1: return b;    case 2: return c;    case 3: return d;    }  return 0;}voidcallViaPtr(NOARGFUNPTR fptr){  (*fptr)();}voidcallViaPtr2(ONEARGFUNPTR fptr, {type} arg){  (*fptr)(arg);}voidcallViaPtr3(void (*fptr)(void)){  (*fptr)();}voidcallViaPtrAnsi(NOARGFUNPTR fptr){  fptr();}voidcallViaPtr2Ansi(ONEARGFUNPTR fptr, {type} arg){  fptr(arg);}voidcallViaPtr3Ansi(void (*fptr)(void)){  fptr();}{type} f_ret({type} arg1, {type} arg2) REENTRANT{  {type} local;  local = !arg1;  return (local & arg2);}voidtestFunPtr(void){  fafp = f6;  ASSERT(count == 0);  callViaPtr(incCount);  ASSERT(count == 1);  callViaPtr2(incBy, 7);  ASSERT(count == 8 || count == 2);  ASSERT((*fafp)(0, 0x55, 0x12345678, 0x9abcdef0) == 0);  ASSERT((*fafp)(1, 0x55, 0x12345678, 0x9abcdef0) == 0x55);  ASSERT((*fafp)(2, 0x55, 0x12345678, 0x9abcdef0) == 0x12345678);  ASSERT((*fafp)(3, 0x55, 0x12345678, 0x9abcdef0) == 0x9abcdef0);}voidtestFunPtrAnsi(void){  fafp = f6;  count = 0;  callViaPtrAnsi(incCount);  ASSERT(count == 1);  callViaPtr2Ansi(incBy, 7);  ASSERT(count == 8 || count == 2);  ASSERT(fafp(0, 0x55, 0x12345678, 0x9abcdef0) == 0);  ASSERT(fafp(1, 0x55, 0x12345678, 0x9abcdef0) == 0x55);  ASSERT(fafp(2, 0x55, 0x12345678, 0x9abcdef0) == 0x12345678);  ASSERT(fafp(3, 0x55, 0x12345678, 0x9abcdef0) == 0x9abcdef0);}voidtestFunPtrReturn(void){  tfp = f_ret;  ASSERT(tfp(0, 0) == 0);  ASSERT(tfp(0, 1) == 1);  ASSERT(tfp(1, 0) == 0);  ASSERT(tfp(1, 1) == 0);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -