在函数上使用 typedef 时遇到困难......出现错误 "redeclared as different kind of symbol"

Facing difficulty in using typedef on a function.....getting error "redeclared as different kind of symbol"

UART_ATMEGA328.h

#define UART_ATMEGA328_H_

void USART_Init(unsigned long);             /* USART initialize function */
char USART_RxChar();                        /* Data receiving function */
void USART_TxChar(char);                    /* Data transmitting function */
void USART_SendString(char*);               /* Send string of USART data function */

#endif /* UART_ATMEGA328_H_ */ 

sim900.h

#define SIM900_H_

typedef void (*USART_Init)(unsigned long);
typedef void (*USART_SendString)(char*);
typedef void (*USART_TxChar)(char);

typedef struct
{
    USART_Init start;
    USART_SendString write;
    USART_TxChar tx;
    //Define anything else you need ..
}Sim900_Config_t;


void InitiateGSM(); //Check GSM
void SendSMS(char*); //Send SMS Function
void StoreSMS(); //Store SMS

#endif /* SIM900_H_ */

错误:'USART_Init'重新声明为不同类型的符号/'USART_SendString'重新声明为不同类型的符号/'USART_TxChar'重新声明为不同类型的符号

函数名称和类型名称之间存在冲突。没有什么合理的(丑陋的宏合理)可以解决它。

我建议为类型选择一个新名称。比如添加_cb_f后缀(缩写为“callback”或“function”)。

一个小调整。 考虑为函数创建类型,而不是函数指针。它使类型声明更易于理解,尤其是当函数指针作为参数传递或返回时。而且,它没有隐藏typedef.

中的指针
typedef void config_init_f(unsigned long);
typedef void config_send_string_f(char*);
typedef void config_tx_char_f(char);

typedef struct
{
    config_init_f* start;
    config_send_string_f* write;
    config_tx_char* tx;
    //Define anything else you need ..
}Sim900_Config_t;