关注,为官方帐户加注星标,不要错过令人兴奋的内容StrongHuang微信公众号:stronghuangHuang一些读者提出了这样一个问题:我将IAR EWARM中的函数复制到Keil MDK-ARM之后,发生了编译错误吗?为什么可以编译并传递EWARM,但是MDK-ARM中会出现错误? strongHuang 1函数中变量定义的位置让我们看一下代码中变量a,b,c和d的位置:void Test(void){char a; // printf定义的位置(“ a =%d ”,a);字符b; //由b printf(“ b =%d " b); for(char c = 0; c 10; c ++)// c定义的位置{char d; printf(“ c =%d " c); printf(“ d =%d ”,d); }}上面的变量定义位置,我相信很多人都看过它们,有些朋友在实际编程中经常在这些位置中定义它们。

C编译器将上述代码编译为错误吗?答:根据C89标准编译会导致错误;否则,可能会出错。

根据C99标准进行编译不会导致错误。

strongHuang 2变量定义位置之间的差异我相信很多朋友上大学时都学习过C和C ++,而那些研究C ++的人都知道上述代码变量定义的位置是非常合理的。

但是我不知道您是否知道C89和C99之间的区别。

仍然有许多差异。

本文讨论了定义变量位置的区别。

C89标准不允许您在函数的随机位置声明变量。

C语言中的变量声明不能放在任何可执行语句之后,而只能放在函数(可执行语句)的开头。

如在先前的代码中一样,需要将其放置在[printf(“ a =%d &quot ;, a);]在此声明之前。

C99和C ++放宽了限制,并允许在函数体中的任何位置声明变量。

新的C99标准满足立即在功能主体中定义变量的功能。

但是,请注意变量。

范围。

例如以下代码将产生错误:void Test(void){for(char c = 0; c 10; c ++){printf(“ c =%d " c);} printf(" c =%d " c); //这里有一个问题} strongHuang 3 MDK-ARM和EWARM中C99的配置上面提到的问题在于IDE的配置。

EWARM项目默认情况下支持C99标准,而MDK-ARM项目默认情况下不支持C99标准。

因此,如果将支持C99标准的代码复制到不支持C99标准的环境中,则编译将由于该代码而导致错误。

MDK-ARM和EWARM只需要修改配置即可支持C99标准。

1. MDK-ARM配置项目->目标的选项-> C / C ++检查“ C99模式”。

2. EWARM配置项目->选项-> C / C ++编译器->选择语言1只需转到“ C99”。

关于变量定义的位置也有很多争议:有人说,为了与C89标准兼容,它们都写在可执行语句的前面;有些人喜欢C99标准的规定。

你怎么认为? ----------- END ------------推荐阅读:C语言实现了面向对象的原理程序员为了高级使用在Embedded Studio中需要掌握几种排序算法-Link调试教程关闭说明微信公众号“ strongerHuang”,后台回复“ 1024”要查看更多内容,请回复“添加群组”按照规定加入技术交流小组。

长按可转到图片中包含的官方帐户。

点击“阅读原件”查看更多分享。

欢迎分享,收藏,喜欢和观看。

免责声明:本文内容经21ic授权后发布,版权归原作者所有。

该平台仅提供信息存储服务。

本文仅代表作者个人观点,不代表本平台的立场,如有任何疑问,请与我们联系,谢谢!