#include<stdbool.h>
#include<stdio.h>
#include<stdint.h>
typedef struct tagTest
{
float f1;
float f2;
bool b3;
}TEST_T;
void test(TEST_T* p)
{
p->f1 = 50.0;
p->f2 = 80.0;
p->b3 = false;
}
int add(int a, int b)
{
return a + b;
}
unsigned int address[100];
#define FUNCTION_TYPEDEF(name, returntype, ...) typedef returntype (*name##_FP)(__VA_ARGS__); //函數(shù)指針通用聲明
FUNCTION_TYPEDEF(Test, void, ...)//定義函數(shù)指針
#define Test(...) ((##Test##_FP)((unsigned int*)(BASE_ADDR+address[0])))(__VA_ARGS__)//定義函數(shù)調用
FUNCTION_TYPEDEF(AddTest, int, int, int)//定義函數(shù)指針
#define AddTest(...) ((##AddTest##_FP)((unsigned int*)(BASE_ADDR+address[1])))(__VA_ARGS__)//定義函數(shù)調用
int main()
{
char* BASE_ADDR = 0;
address[0] = (unsigned int)test;
address[1] = (unsigned int)add;
TEST_T t = {0};
Test(&t);
printf("t.f1 = %f\n", t.f1);
printf("add result = %d\n", AddTest(5, 10));
return 0;
}