收藏官网首页
查看: 13391|回复: 3

关于Keil_C99标准

65

主题

123

帖子

787

积分

高级会员

Rank: 4

积分
787
跳转到指定楼层
楼主
发表于 2015-7-29 18:41:26 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
校园创客福利
问题描述:
如果在工程项目中不配置--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的基础上发展起来的,增加了基本数据类型,关键字和一些系统函数等。其实在初学阶段C89ANSI C)和C99的区别是不易察觉的,所以不必太在意这个。
C99有一部分是对于大字符集的优化(很多资料上写的是ANSI标准化),还加入了一些数据库函数,是C89之后的标准,我们用的CC89标准的,C++C89编写的,目前的C99标准其实在以前的编译器中就或多或少的支持了,目前完全支持的有这些:GCCBorland C++等。

56

主题

144

帖子

1066

积分

金牌会员

Rank: 6Rank: 6

积分
1066
QQ
沙发
发表于 2015-7-31 11:04:53 | 只看该作者
还有一个方法就是安装keil5
然后做如下设置:

QQ20150731-1.png (82.74 KB, 下载次数: 143)

QQ20150731-1.png

5

主题

63

帖子

860

积分

高级会员

Rank: 4

积分
860
板凳
发表于 2015-7-31 16:15:51 | 只看该作者
学习了,感谢分享!!

0

主题

13

帖子

150

积分

注册会员

Rank: 2

积分
150
地板
发表于 2015-7-31 16:18:57 | 只看该作者
学习了,谢谢楼主分享
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

加入Q群 返回顶部

版权与免责声明 © 2006-2024 Gizwits IoT Technology Co., Ltd. ( 粤ICP备11090211号 )

快速回复 返回顶部 返回列表