嵌入式编程别忽略了C语言的标准
创始人
2024-03-21 00:06:42

073625667591d2a93997f025acae3356.gif

正文


大家好,我是bug菌~

最近做代码评审发现很多同事的编码都游走在风险的边沿,其中最显眼的就是局部变量定义位置比较随意。

对于C语言编程老手而言,绝大部分都已经养成了"变量定义必放在语句块的开头"这一习惯,依稀还记得那时候学校老师在课堂上强调C语言的局部变量一定要放在函数的开头。

void Function(void)
{int Var1 = 0;int Var2 = 0;//do someting......}

刚开始学习C语言的时候,感觉也没啥好解释的,照着书上和老师的"规矩"来就可以了,后来又学习了C++,C++对这一块相对就比较灵活,注意一下作用域,随时定义随时用,不需要遵循变量定义必须放在函数开头这一规则。

void Function(void)
{int Var1 = 0;//do someting......int Var2 = 0;//do someting......}

直到很久很久以前有一次看到别人的C程序也可以像C++这样灵活的定义变量,才认识到C语言还有不同的标准,也是从那以后开始了解C语言的标准。

所谓"无规矩、不成方圆",不同的编译器会根据不同的标准引入相关的"规矩"来约束和指导编程人员进行程序设计。

C语言作为嵌入式领域主力的编程语言,自然也应该不断的修正和优化,那得有专门的人来做这些事 -- C语言标准化委员会,目前编译器主要参考的有三个标准:

C89(C90)1989年批准、1990年发布(ISO/IEC 9899: 1990 )
C991999年发布(ISO/IEC 9899: 1999)
C112011年发布(ISO/IEC 9899: 2011)

当然啦,据了解目前的标准都已经更新到了C17,但具体哪些编译器对其进行了支持,那又是另外一个故事了。

编译器为了满足不同开发者的需求,以及新旧代码工程的兼容,都会把C语言标准的相关选择放开到编译选项中,开发人员根据自身需求进行选择编译自己的工程源码,我们来看看,比如:

IAR编译器中:

b44714fbc72c84758b0c8f2cde0fb651.png

GCC编译器中:

GCC提供了一些C程序编译的扩展选项,使用-std来进行设置,比如编译的时候选择-std=gnu99,对应着GUN对C99的的一些扩展。

特别在进行代码的移植等等方面,对于当前手头工具所遵循的C标准还是要心里有数的,不然一大堆编译错误,够你折腾的。

前面bug菌聊到,虽然C语言标准是在不断的更新,然而编译器却不一定同步支持,纵观大部分嵌入式编译器绝大多数还停留在最高仅支持C99的标准,甚至还不一定全面支持该标准。

个人觉得主要的原因还是对于相关的标准实现起来比较繁琐,同时在相关领域使用的频率实在是太低,所以没有得到全面支持,当然了,有一些编译器为了更好的客户体验,还会加入自身的一些特殊扩展。

那么bug菌这里简单罗列了一下相对于C89标准,C99标准所新增的一些常用的标准项目:
1、预处理,行注释"//"的支持;

2、inline内联关键字,内联函数的支持;

3、变量声明不必放在语句块的开头,这也是前面提到的,支持该特性以后for循环常用的一种方式是:for(int i=0;i<100;i++) ;

4、对数组的增强,可变长数组;

5、加入了__func__预定义标识符;

6、不再支持隐式返回,有返回值比如return;

7、对整形提升的修改,其级别低于int或unsignedint的任何整数类型均可被替换成int或unsignedint类型。

还有特别多吧,这里没办法一一列举了,感兴趣的朋友可以去参考下C99标准的文档。

最后

      好了,今天就跟大家分享这么多了,如果你觉得有所收获,一定记得点个~

最后一个bug,bug菌唯一创作平台~

f38420006afe484ea3d96340a1494766.jpeg

推荐专辑  点击蓝色字体即可跳转

☞  MCU进阶专辑 d11bfff6b7aa6735255f8d2c30d89c9e.gif

☞  嵌入式C语言进阶专辑 da6c6c3249137519f9988cdd162ed0ca.gif

☞  “bug说”专辑 fe4ae2dd06ba8d989d18d5e4ff2d4f9a.gif

☞ 专辑|Linux应用程序编程大全

☞ 专辑|学点网络知识

☞ 专辑|手撕C语言

☞ 专辑|手撕C++语言

☞ 专辑|经验分享

☞ 专辑|电能控制技术

☞ 专辑 | 从单片机到Linux

46546ea4b0f5cc0635846684f5d4239e.gif

相关内容

热门资讯

广州聚龙湾太古里一期滨水生活方... 观点网讯:2月13日,珠江实业集团与太古地产在广州荔湾区冲口仓举行聚龙湾太古里一期滨水生活方式启动仪...
【独家】智元新一代人形机器人远... 界面新闻记者 | 徐美慧界面新闻编辑 | 文姝琪2月13日,智元机器人正式发布全新一代全尺寸人形机器...
72万辆次出沪!马年春运出行遇... (来源:上观新闻)自2月2日起,为期40天的2026年春运正式拉开序幕,今年春运呈现“先团聚、后旅游...
中国人民银行举办离退休干部20...   2月11日,中国人民银行举办离退休干部2026年新春团拜会。中国人民银行党委书记、行长潘功胜出席...
晋安湖公园换新装迎新春 福州新闻网2月13日讯(记者 孙漫)这个春节,快来晋安湖公园一起找寻春日的限定浪漫。记者13日从福州...