打印
[技术问答]

keil编译的error: declaration

[复制链接]
1064|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
51xlf|  楼主 | 2022-7-6 12:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 eltonchang2001 于 2022-7-6 14:32 编辑

keil编译的error: declaration may not appear after executable statement in block

C99标准就已经改变了,无论定义在之前还是之后都是可以的。所以解决方法有两个:

一、定义放在函数的开头

二、修改编译为c99(下面keil5为例子)

先点击魔术棒,再点c/c++,打钩上C99 mode 即可。如图所示


使用特权

评论回复

相关帖子

沙发
妇女半边天| | 2022-7-7 10:09 | 只看该作者
顶上去,好内容

使用特权

评论回复
板凳
mickit| | 2022-8-19 20:19 | 只看该作者
写代码的格式不一样。   

使用特权

评论回复
地板
zerorobert| | 2022-8-19 20:39 | 只看该作者
变量放在最前面。   

使用特权

评论回复
5
kmzuaz| | 2022-8-19 22:31 | 只看该作者
选择c99的方式。   

使用特权

评论回复
6
weitingliu| | 2022-8-25 16:19 | 只看该作者
本帖最后由 weitingliu 于 2022-8-25 16:21 编辑

有个方式可以在宣告前后加入 { } 来形成 block就能避免这个编译错误,此时宣告的变量只有在  {..} 内能存取。
这样也能有模块化的校果,有点  code snippet 的味道

PS: 楼主下次也用 HT32 来截图说明,我们更感激唷! 原帖的图是 STM32..... XD

下面是一个例子
void ADC_Configuration(void)
{
  /* Configure AFIO mode as ADC and VREF function                                                           */
  AFIO_GPxConfig(HTCFG_VR_GPIO_ID, HTCFG_VR_AFIO_PIN, AFIO_FUN_ADC0);

  { /* Enable peripheral clock                                                                              */
    CKCU_PeripClockConfig_TypeDef CKCUClock = {{ 0 }};
    CKCUClock.Bit.AFIO = 1;
    CKCUClock.Bit.ADC0 = 1;
    CKCU_PeripClockConfig(CKCUClock, ENABLE);
  }

    .......
}

使用特权

评论回复
7
51xlf|  楼主 | 2022-9-2 09:47 | 只看该作者
weitingliu 发表于 2022-8-25 16:19
有个方式可以在宣告前后加入 { } 来形成 block,就能避免这个编译错误,此时宣告的变量只有在  {..} 内能存 ...

好的,分享一些自己的心得与体会。
正在学习ht32

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

535

主题

9633

帖子

23

粉丝