stm32里为什么结构体变量定义GPIO_InitTypeDef GPIO_InitStruct;要放在RCC_APB2PeriphClockCmd()前面?

如果这样写RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);GPIO_InitTypeDefGPIO_InitStr... 如果这样写
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitTypeDef GPIO_InitStruct;
就MDK就报错 main.c(6): error: #268: declaration may not appear after executable statement in block
请问为什么报错,这两句话有什么联系?
展开
 我来答
wolf_lhy
推荐于2018-03-04 · TA获得超过6609个赞
知道大有可为答主
回答量:1090
采纳率:66%
帮助的人:553万
展开全部
这与STM32无关,是C语言的语法要求,C语言要求,变量定义之前,不得有任何内存的读写操作,比如赋值,函数调用等等,都涉及到内存的操作,这些动作,不得在变量定义之前。
这是因为,定义变量,是要从内存中的堆空间或者栈空间分配空间给这个变量的,所以,出于安全及简单考虑,C语言不允许在变量定义之前有内存的操作.
所以,即使你把“GPIO_InitTypeDef GPIO_InitStruct;”换成int a;也是不行的。

C语言的升级版 C++允许在定义之前进行内存操作
wooden954
推荐于2016-10-14 · TA获得超过1万个赞
知道大有可为答主
回答量:6135
采纳率:93%
帮助的人:831万
展开全部
这种情况是C语言本身的特性决定的。

GPIO_InitTypeDef是一个结构体类型,GPIO_InitStruct是一个变量名称。
而RCC_APB2PeriphClockCmd()是一个函数调用,是具体的可执行代码。
C语言规定,变量的定义,必须位于函数的前面(用于定义全局变量),或者在函数内部也必须放于可执行语句的前部。不允许出现先有代码再定义变量之后又有代码的混合结构。
所以从这个特点来看,定义变量GPIO_InitStruct的语句必须放在可执行代码 RCC_APB2PeriphClockCmd()的前面。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
決狐疑
2015-11-13 · 超过15用户采纳过TA的回答
知道答主
回答量:54
采纳率:0%
帮助的人:16.9万
展开全部
如果你RCC_APB2PeriphClockCmd()这个函数没有调用GPIO_InitStruct结构体的话,放哪都没关系,如果调用了,最好放他前面,否则就会提示GPIO_InitStruct没有定义,如果没掉用那就没什么关系了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fcl_andy
2013-11-07 · 超过24用户采纳过TA的回答
知道答主
回答量:60
采纳率:0%
帮助的人:55.9万
展开全部
编译器限制了定义变量应放在大括号的开始位置.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xyaping
2015-11-30 · 超过17用户采纳过TA的回答
知道答主
回答量:48
采纳率:0%
帮助的人:38万
展开全部
先要定义一个结构体,然后用这个新定义的结构体来初始化!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式