一、问题描述
如图:在点灯的过程中想写一个for循环来实现随机数点灯功能,但是如下图第26行的代码出现了问题“declaration may not appear after executable statement in block”,翻译过来就是声明不能出现在块中的可执行语句之后。其实int i是声明语句,值得注意的是“GPIO_InitTypeDef GIIOPP”(此句的作用是定义了一个GPIO_InitTypeDef
类型的结构体变量GIIOPP
)也是声明语句。
二、解决方案一
将声明语句放在int main()语句下方,对于上图而言,可以把int i放在int main()的上方;或者将其放在GPIO_InitTypeDef GIIOPP的上方/下方。只需要将声明语句放在可执行语句之前。GPT的回答如下。
三、解决方案二
1、因为keil 默认编译标准是C89,将C89换成C99就行。此时声明语句的位置不影响代码执行
2、如下图:
3、C89和C99的区别
Keil是一款广泛使用的嵌入式开发工具,它提供了多种编译标准选项,包括C89和C99。
C89是指ANSI C(或称为C90)标准,在1989年发布。它是最早的C语言标准之一,定义了C语言的基本语法和特性。
C99是指C语言的第二个标准,于1999年发布。相比于C89,C99引入了一些新特性和改进,以增强C语言的表达能力和功能,提供更方便的编程方式。
C89与C99的区别主要体现在以下几个方面:
-
数据类型:C99引入了新的数据类型,例如
long long int
和bool
等。而C89只支持基本的数据类型。 -
预处理指令:C99增加了一些新的预处理指令,例如
_Pragma
和__func__
等,提供更灵活和强大的预处理功能。 -
变长数组:C99支持变长数组,可以动态指定数组的长度。而C89中数组的长度必须是常量。
-
注释:C99支持在代码中使用
//
进行单行注释,而C89中只支持/* */
多行注释。 -
布尔类型:C99引入了
_Bool
类型,用于表示布尔值(true或false)。而C89中使用整型来表示布尔值。文章来源:https://www.toymoban.com/news/detail-763920.html
需要注意的是,不同版本的编译器可能对C89和C99的支持程度有所差异。因此,在选择编译标准时,需要根据实际情况和编译器的支持情况来确定。文章来源地址https://www.toymoban.com/news/detail-763920.html
到了这里,关于STM32问题_01:declaration may not appear after executable statement in block的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!