点击Keil的C99解决Keil_C51无法定义局部变量问题以及解决变量不能定义在可执行函数前(User\main.c(22): error: #268: declaration may not a)

这篇具有很好参考价值的文章主要介绍了点击Keil的C99解决Keil_C51无法定义局部变量问题以及解决变量不能定义在可执行函数前(User\main.c(22): error: #268: declaration may not a)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.先说重点:

先说一下C99重要的性质:那就是变量可以定义在变量被引用前的任意位置

c51局部变量,开发bug,c++,开发语言,stm32,单片机

 在C89标准的时候,例如我要写一个for循环的函数

在C99模式下,我们可以写成

for(int i=0;i<10;i++){
    //for循环语句
}

也就是可以将变量定义在被引用前的任意位置,但是在C99标准之前,要求函数中的局部变量必须定义在函数的开头

2、发现问题根源

此前写了一个C51的程序,在函数中定义了一个局部变量,然后怎么都编译不通过,报错显示我定义的变量没有定义,我一开始以为是我其他部分的程序有问题,但是反复找了半天,都没找到,最后无意间看到一个资源描述下面的几行字,试了一下才真正找到原因所在。

因为一个函数里面需要用到for循环,然后我定义一个顺序变量j,由于此前的经验,我了解到在Keil_C51里面不能在for循环里面定义变量,因此我选择在外面定义变量,但是仍然报错,显示我定义的j没有定义。

无意间看到一句话

在C++中变量的定义可以在用到的时候再定义,因此可以在for循环里面定义,但是C语言必须在函数体的开头定义变量

我一开始是不信的,这不是扯淡吗,咱也不是刚写C语言,咋不记得有这条破规矩?但是很快就被打脸了,当我把那句uchar j;移到函数开头时,还真编译通过了。。。。


于是我开始查找资料,最后发现问题出在Keil本身上,因为Keil_C51支持的C标准还是20多年前的C89,而C89要求函数中的局部变量必须定义在函数的开头。然后我就去找如何把Keil_C51的C标准给“更新一下”,但是很遗憾,Keil_ARM是可以把编译器的C标准设置为C99的,但是Keil_C51不行。既然没办法改变,那就只能适应一下喽,但是为了之后尽量不踩坑,就想着把类似的坑全部找出来,于是就去网上查找C89标准和Keil_C51编译器使用需要注意的事项,记录了一些资料。

3、注意点

Keil_C51的编译器的C标准也不是完整的C89,因为C89甚至不支持 // 的注释符,所以建议使用的时候可以多找资料,然后多参考那本Keil_C51编译器的用户手册,有问题解决问题,再记录,这样问题肯定是会越来越少的。

4、补充报错使用C99模式解决

在Keil_ARM中有时候也会出现类似问题,而且会报错:User\main.c(22): error: #268: declaration may not appear after executable statement in block,表示变量定义前不能出现可执行语句,这点也是因为Keil默认的编译器是C89,需要在项目管理中设置为C99标准,再次编译,报错即消失。
 

c51局部变量,开发bug,c++,开发语言,stm32,单片机

 

更多内容可以参考这位博主的文章,强力推荐,这里已经把C99的很多新增特性说清楚了

C99新增特性大全文章来源地址https://www.toymoban.com/news/detail-719262.html

到了这里,关于点击Keil的C99解决Keil_C51无法定义局部变量问题以及解决变量不能定义在可执行函数前(User\main.c(22): error: #268: declaration may not a)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 解决Keil5中MDK与C51共存没有STC芯片型号

    STC官网网址:http://www.stcmcu.com/ 进入第一步的官网界面再往下滑动下基本就可以找到“STC-ISP下载编程烧录软件”专栏。 点击后会下载一个压缩包 解压后得到的应用程序 1、双击该软件,打开该软件,点击该软件界面右侧的“Keil仿真设置”栏,再点击“添加型号和头文件到K

    2024年02月06日
    浏览(53)
  • keil报错:main.c(99): error: #20: identifier “xxx“ is undefined

    报错如下: main.c(116): main.c(116): error:  #20: identifier \\\"g_pol_par_linear\\\" is undefined main.c(99): error:  #20: identifier \\\"g_motor_sta_linear\\\" is undefined main Interpolation_Linear.c 我认为在主函数里引用了“Interpolation_Linear”的头文件,就包含了里面定义的变量。 但是会报错。 解决办法:在主函数加ex

    2024年02月07日
    浏览(49)
  • 让ARM与C51共用一个keil开发环境并解决Flash download failed -cortex-M3

    arm架构的芯片(如stm32)开发工具为mdk,而C51的开发工具为C51,这两种开发工具在安装时都会自带一个keil编译器的安装。而这也导致了一些麻烦:打开两种不同芯片的工程时打开的编译器不是同一个。如果你在stm32的keil编译器里面的环境配置好了一些炫酷的字体或背景颜色,在

    2024年01月19日
    浏览(50)
  • C51实现0到99数字显示

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 用2位数码管显示计时时间,最小计时单位为“秒”,计时范围00~99s。当第1次按一下并松开计时功能键时,秒表开始计时并显示;第2次按一下并松开计时功能键时,停止计时,将计时的时间值送到数码

    2024年02月11日
    浏览(27)
  • N32 使用keil,无法识别J-Link解决方法

    一、将工程启动路径下的 JLinkSetting.ini 打开,修改内容如下,在重新启动工程即可 Device 根据IC 实际修改 M0或其他 二、若以上不行,下载Jlink 上位机安装包,如下V6.86 https://download.csdn.net/download/cftchaoxiaoshu/87888685 1、安装JLink 官方工具,不要中文路径 三、下载 N32 Jlink 驱动包

    2024年02月07日
    浏览(49)
  • 【Echarts图例点击事件】自定义Echarts图例legend点击事件(已解决)

    **【写在前面】**这下我又不得不说了,还是客户现场使用时想查询一周的数据,查询时候发现页面居然要等20多秒,这是个人都得崩溃吧,然后就开始排查这块业务代码模块,主要体现在两个方面: A.接口请求时间过长(约8秒),有优化的空间 B.前端一次性调用了四次接口,分

    2023年04月08日
    浏览(82)
  • Win11 桌面图标突然无法点击如何解决

    Win11 专业版 Wn11 下载图片后桌面图标突然无法点击,重启资源管理器也不行,只有重启电脑 1.卸载小组件 cmd 输入 winget uninstall MicrosoftWindows.Client.WebExperience_cw5n1h2txyewy 重装 winget install 9MSSGKG348SP 我这出现卸载异常,最后选择禁用解决本案例 2.禁用小组件 打开本地组策略,找到小

    2024年02月12日
    浏览(79)
  • Spring Boot学习随笔- 后端实现全局异常处理(HandlerExceptionResolver),前后端解决跨域问题(@CrossOrigin(局部解决)自定义跨域配置类(全局))

    学习视频:【编程不良人】2021年SpringBoot最新最全教程 异常处理作用:用来解决整合系统中任意一个控制器抛出异常时的统一处理入口 传统单体架构下的处理方式 配置全局异常处理类 resolveException :当控制器方法出现异常时,如果该方法没有try...catch,则会进入当前方法 针

    2024年02月04日
    浏览(65)
  • 解决keil5无法生成axf文件(国信长天STM32G431R8)

    我安装了keil5和STM32cubemx,这两个软件都是从官网下载,速度挺快的,参考博文如下: 【STM32】STM32 CubeMx使用教程一--安装教程_Z小旋的博客-CSDN博客 这里需要注意的就是Java版本一定要选对,我一般的处理方式就是全都 下载最新 的,基本上就不会出错。  Keil

    2024年02月05日
    浏览(56)
  • 解决在本地仓库提交的文件在gitee上无法点击

    在使用git工具上传文件时,可能会发生你提交到gitee中的文件无法点击现象,文件夹显示为灰色并且无法访问,不能点击。 主要原因:无法点击的灰色文件夹中含有 .git 文件 意思就是,在本地初始化的仓库(使用 git init 初始化的文件夹) 中的某一个文件夹里含有 .git 文件 这里

    2023年04月09日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包