问题描述: 如果在工程项目中不配置--c99,将对一些代码的编写不支持如下: 在a.h中** typedef struct _uart2_t { uint32 baud; uint8 rx_buf[USART2_RX_BUF_LEN]; uint16 rx_ptr; uint8 tx_buf[USART2_TX_BUF_LEN]; uint16 tx_len; uint8 receive_flag; void (* init)(void); void (* send_bytes)(uint8* buf,uint32 len); void (* send_string)(uint8* str); //void (* printf)(uint8 *frame,...); }uart2_t; 在a.c中包含此头文件并且初始化 uart2_t uart2={ .rx_ptr=0, .baud=9600, .init=usart2_init, .send_bytes= uart2_put_bytes, .send_string=uart2_put_str, }; 编译出现问题:显示未** 解决方案:解决方案一:在a.c中包含头文件 uart_t uart2; uart2.rx_ptr=0;编译正确 解决方案二:在工程配置中加上--c99 问题延伸:--c99 编译器(基于ANSI C为基础的编译系统)对标准的支持情况各一。如gcc支持最新的--c99标准 C99是标准ISO/IEC 9899:1999的简称。 c99是在c89的基础上发展起来的,增加了基本数据类型,关键字和一些系统函数等。其实在初学阶段C89(ANSI C)和C99的区别是不易察觉的,所以不必太在意这个。 C99有一部分是对于大字符集的优化(很多资料上写的是ANSI标准化),还加入了一些数据库函数,是C89之后的标准,我们用的C是C89标准的,C++是C89编写的,目前的C99标准其实在以前的编译器中就或多或少的支持了,目前完全支持的有这些:GCC、Borland C++等。
|