在函数上使用 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;
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;