OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4992|回复: 6

STM32在初始化定时器时为什么老提示定义没有在函数前

[复制链接]

12

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
88
金钱
88
注册时间
2016-6-4
在线时间
21 小时
发表于 2016-6-17 10:02:56 | 显示全部楼层 |阅读模式
最近接触到STM32F4,老是提示定义没有在函数前,知道是这个原因,但是不明白我的定义放在下面不涉及的函数之后就有问题(第二个箭头处),放在所有的函数之前就OK(第一个箭头处),难道前面几个定时器初始化相关函数包含这个定义的相关内容吗??谢谢
2.png
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

347

帖子

3

精华

金牌会员

Rank: 6Rank: 6

积分
2078
金钱
2078
注册时间
2014-12-19
在线时间
710 小时
发表于 2016-6-18 14:21:33 来自手机 | 显示全部楼层
C99和C++允许随时定义变量,你去编译选项中设置成C99应该就没有问题。并不是说前面的语句会用到这个变量,而是老版的C语法强制要求定义在前面!
回复 支持 1 反对 0

使用道具 举报

7

主题

188

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2282
金钱
2282
注册时间
2013-12-16
在线时间
448 小时
发表于 2016-6-17 10:46:05 | 显示全部楼层
变量只能定义在函数开头,这是C的语法要求
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2016-6-1
在线时间
15 小时
发表于 2016-6-17 14:35:47 | 显示全部楼层
keil 编译器就这样的  变量定义要在前面 不能在操作语句后面  vc就不一样
回复 支持 反对

使用道具 举报

12

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
88
金钱
88
注册时间
2016-6-4
在线时间
21 小时
 楼主| 发表于 2016-6-18 12:18:28 | 显示全部楼层
zdfwyh 发表于 2016-6-17 10:46
变量只能定义在函数开头,这是C的语法要求

C语言的语法要求是定义必须放在其相关函数前,但是我疑问的是中断优先级结构体变量NVIC_InitTypedef  NVIC_InitStruct;是放在下面的NVIC..函数前面,  第一个箭头那部分函数都是定时器分频,计数的设定和下面的中断优先级设置没啥关系呀,中断NVIC_InitStruct定义我放在定时器的设定下面应该也没问题呀???
回复 支持 反对

使用道具 举报

7

主题

188

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2282
金钱
2282
注册时间
2013-12-16
在线时间
448 小时
发表于 2016-6-19 09:46:24 | 显示全部楼层
zorroyl 发表于 2016-6-18 12:18
C语言的语法要求是定义必须放在其相关函数前,但是我疑问的是中断优先级结构体变量NVIC_InitTypedef  NVI ...

不是在相关函数之前声明就行,必须是整个函数定义的开头,即在运算操作或判断操作之后就不允许再出现定义声明.这是C的语法要求
回复 支持 反对

使用道具 举报

12

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
88
金钱
88
注册时间
2016-6-4
在线时间
21 小时
 楼主| 发表于 2016-6-21 14:07:28 | 显示全部楼层
lvehe 发表于 2016-6-18 14:21
C99和C++允许随时定义变量,你去编译选项中设置成C99应该就没有问题。并不是说前面的语句会用到这个变量, ...

多谢,明白了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-27 14:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表