编辑代码

#include <stdio.h>

#define getVariableName(x) #x

typedef void (*MolPump_RS232_Inquire_message_ptr)(void);


void MolPump_RS232_Motor_Inquire_message10(void)
{
    printf("Motor_Inquire_message10\r\n");
}
void MolPump_RS232_Motor_Inquire_message11(void)
{
    printf("Motor_Inquire_message11\r\n");
}

void MolPump_RS232_Bear_Inquire_message10(void)
{
    printf("Bear_Inquire_message10\r\n");
}

/*指针函数初始化,用于查询报文发送哪个判断*/
//电机查询报文
MolPump_RS232_Inquire_message_ptr MolPump_RS232_Motor_Inquire_message_arr[] =
{MolPump_RS232_Motor_Inquire_message10, MolPump_RS232_Motor_Inquire_message11,MolPump_RS232_Bear_Inquire_message10};

MolPump_RS232_Inquire_message_ptr MolPump_RS232_Bear_Inquire_message_arr[] =
{MolPump_RS232_Bear_Inquire_message10};


void MolPump_RS232_Motor_Inquire_message(char paraID)
{
    int ptr_len = 0,arr_len = 0;
    paraID = paraID - 0x10; //这里减0x10,是为了下面的判断调用,查询的报文都是从0x10开始的,但这里用的指针函数是需要从0开始
    ptr_len = sizeof(MolPump_RS232_Inquire_message_ptr);
    arr_len = sizeof(MolPump_RS232_Motor_Inquire_message_arr);
    printf("%s = %d,%s = %d",getVariableName(ptr_len),ptr_len,getVariableName(arr_len),arr_len);    
    if (paraID >= 0 && paraID < sizeof(MolPump_RS232_Motor_Inquire_message_arr) / sizeof(MolPump_RS232_Inquire_message_ptr))
    {
        MolPump_RS232_Motor_Inquire_message_arr[paraID](); // 调用对应的函数
    }
}

void MolPump_RS232_Bear_Inquire_message(char paraID)
{
    int ptr_len = 0,arr_len = 0;
    paraID = paraID - 0x10; //这里减0x10,是为了下面的判断调用,查询的报文都是从0x10开始的,但这里用的指针函数是需要从0开始
    ptr_len = sizeof(MolPump_RS232_Inquire_message_ptr);
    arr_len = sizeof(MolPump_RS232_Bear_Inquire_message_arr);
    printf("%s = %d,%s = %d",getVariableName(ptr_len),ptr_len,getVariableName(arr_len),arr_len);    
    if (paraID >= 0 && paraID < sizeof(MolPump_RS232_Bear_Inquire_message_arr) / sizeof(MolPump_RS232_Inquire_message_ptr))
    {
        MolPump_RS232_Bear_Inquire_message_arr[paraID](); // 调用对应的函数
    }
}

int main () {
    MolPump_RS232_Motor_Inquire_message(0x12);
    MolPump_RS232_Bear_Inquire_message(0x10);
    return 0;
}