C语言根据函数指针偏移实现函数动态调用

#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__); //函数指针通用声明

FUNCTION_TYPEDEF(Test, void, ...)//定义函数指针
#define Test(...) ((##Test##_FP)((unsigned int*)(BASE_ADDR+address[0])))(__VA_ARGS__)//定义函数调用

FUNCTION_TYPEDEF(AddTest, int, int, int)//定义函数指针
#define AddTest(...) ((##AddTest##_FP)((unsigned int*)(BASE_ADDR+address[1])))(__VA_ARGS__)//定义函数调用

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;

}

 

posted @ 2025-07-21 17:29  快雪  阅读(22)  评论(0)    收藏  举报