打印
[开发工具]

【新手提醒】不能把变量声明在程序块中

[复制链接]
3364|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
stm_zy|  楼主 | 2009-11-14 08:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
TI, code, dso, pc, ps
本帖最后由 stm_zy 于 2009-11-14 09:24 编辑

不能把变量声明在程序块中,如下:

void somefunc(void)
{
...
    //初始化TIM2
     CLK->PCKENR1 |= 0x20;   //开启TIM2的时钟
     TIM2->PSCR  |= 0x01;   //配置TIM2的预分频器
     TIM2->ARRH  = 0xc3;
     TIM2->ARRL  = 0x50;    //0xc350 ==50000
     TIM2->CR1   |= 0x81;   //存储器通过缓冲预装载,使能计数器
     TIM2->IER   |= 0x01;   //更新中断使能
     int abc = 5;//<-----这里
...
}
如果那么声明变量,就会有类似如下的提示:
#error cpstm8 main.c:62(20) missing ;
特此提示一下,望相互转告。
沙发
cgha| | 2009-11-14 08:48 | 只看该作者
c++编译器才支持的吧

使用特权

评论回复
板凳
秋天落叶| | 2009-11-14 09:07 | 只看该作者
不能这样声明吗,一般的C程序可以这样声明呀

使用特权

评论回复
地板
yewuyi| | 2009-11-14 09:10 | 只看该作者
很多针对MCU的C编译器都不支持类似要求,但可以如下:
void somefunc(void)
{
     int abc = 5;//<-----这里,大多数都支持放在这里定义。
...
    //初始化TIM2
     CLK->PCKENR1 |= 0x20;   //开启TIM2的时钟
     TIM2->PSCR  |= 0x01;   //配置TIM2的预分频器
     TIM2->ARRH  = 0xc3;
     TIM2->ARRL  = 0x50;    //0xc350 ==50000
     TIM2->CR1   |= 0x81;   //存储器通过缓冲预装载,使能计数器
     TIM2->IER   |= 0x01;   //更新中断使能...
}

使用特权

评论回复
5
yewuyi| | 2009-11-14 09:12 | 只看该作者
这应该是这些编译器针对变量作用域的范围判断做出的限制,在一个函数内定义的局部变量仅能作用在这个函数域内,但它能识别的最小作用域就是这个函数,无法再进一步识别到函数内更小的作用域范围。

使用特权

评论回复
6
香水城| | 2009-11-14 09:14 | 只看该作者
本帖最后由 香水城 于 2009-11-14 09:15 编辑

1)STVD是一个调试环境,不是编译器,楼主的问题与STVD无关。这个问题与COSMIC编译器相关。

2)标准C语言要求所有的局部变量,必须在每个函数中所有的可执行语句之前声明和定义,不允许在程序中间插入任何定义变量的语句行。2楼说的对,C++的语法中才允许在程序中间定义变量。

总体而言,楼主说的这个问题是C语法所约定的,与STVD无关,也不是COSMIC特有的。

使用特权

评论回复
7
stm_zy|  楼主 | 2009-11-14 09:22 | 只看该作者
看来是我孤陋了。:L

使用特权

评论回复
8
lollipooop| | 2009-11-14 19:49 | 只看该作者
C99是可以这样声明的。我似乎看到过说cosmic支持C99的,不确定。。。

使用特权

评论回复
9
a1z26| | 2009-11-14 23:22 | 只看该作者
C++允许变量直到使用时才去定义。

使用特权

评论回复
10
kiton_law| | 2009-11-24 00:07 | 只看该作者
C99是可以这样声明的。我似乎看到过说cosmic支持C99的,不确定。。。
lollipooop 发表于 2009-11-14 19:49


一般底层代码很少用C99特性,因为大多数编译器不支持。

使用特权

评论回复
11
baidudz| | 2009-11-24 09:13 | 只看该作者
变量申明放在结尾没试过,开头肯定是支持的

使用特权

评论回复
12
lollipooop| | 2009-11-24 11:30 | 只看该作者
An evolution from the older C89 standard was introduced in 1999.
Referred to as C99 (orC9X), the new standard has added a few new
types and constructs. Some of these features have been used in COS-
MIC compilers as C99 conformant extensions to the C89 standard.

使用特权

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

本版积分规则

6

主题

60

帖子

0

粉丝