程序小白
认证:优质创作者
所在专题目录 查看专题
不一样的宏定义(C语言小知识)
函数的调用和回调(OS小知识)
C语言指针数组(C语言小知识)
C语言中函数调用与堆栈详解
被C标准和编译器选项给狠狠的上了一课
extern "C" 的意义?——盘一下GCC!
作者动态 更多
小小调度器——开局default,优雅总藏于细节之中
04-02 09:23
小小调度器——调度器核心的纯C实现
04-01 14:09
小小调度器——原来C代码还能这么写,原作者没少挨打吧!
03-27 15:42
解析由系统库引发的hardfault血案(RT-Thread+ESP32)
2023-07-17 16:04
TINA瞬时现象仿真分析——运放缓冲器振铃
2023-02-28 11:38

被C标准和编译器选项给狠狠的上了一课

  案发经过:

  最近更新了的QPC6.9.1A的源库,和往常一样掏出了大佬已经写好的demo,根据平台类型大佬给一分为三:qk(抢占式)、qv(合作式)、win32-gui(Windows平台)

  果断选择最简单的qv开撸,然后选择编译器类型,ARM-CM的内核还能选编译器,不是选开发环境吗?IAR或者KEIL,是的没错,其实他们的本质就是编译器不同,除了开发环境以外,你可以选择一款编译器直接开撸,例如GNU。

  这里我选择armclang,那是什么鬼?它是一个编译器,是KEIL使用的编译器,任何一款开发环境都需要编译器的支持,ARM天下来来回回都是它们在辛苦的工作。

  第一次编译就被来了个下马威:TWO ERROR!

  找到这个定义的位置,看看什么情况,单从打印信息来看是讲找不到定义。

  _delay的定义是与编译器相关的,可是编译器是内置的,应该不需要自己额外添加宏去打开编译器。关于编译器是什么样的,他也没有具体说清楚。IDE隐藏了太多的细节。

   继续分析我们的错误,过程曲折,最终找到,是在C语言标准的问题上:

  C语言标准还是挺多的,C90 、C99 、C11 还有GNU版本。看样子还是挺多的,我选的default,默认是GNU11版本。编译错误消失了,但是问题不能这么放过,百度了一下关于C的标准,新标准兼容了很多新的东西,所以建议大家以后在配置工程时选用最新的C标准。

  另外关于GNU是什么鬼?GNU是编译器,它也有很多能够影响编译规则的内容。

  国际标准组织发布c11后,gnu为自己的编译器发布两种标准gnu11和c11。

  gnu11:带gnu c扩展的c11标准,如果你的代码包含了typeof,__attribute__等等gnu的扩展,就必须用这个。

  c11:这个就是纯c11的标准,不带gnu扩展。

声明:本内容为作者独立观点,不代表电子星球立场。未经允许不得转载。授权事宜与稿件投诉,请联系:editor@netbroad.com
觉得内容不错的朋友,别忘了一键三连哦!
赞 3
收藏 3
关注 115
成为作者 赚取收益
全部留言
0/200
成为第一个和作者交流的人吧