ilovezeno 发表于 2009-3-3 22:12:26

请问傻孩子:我按照书中的例子实验,为什么调换2个定义语句的位置,编译器就会报错呢?

照着书中跑马灯的程序来编写,把unsigned char Counter=0;放在引脚定义之前,iccavr编译完全没有问题,但是一旦我先定义引脚输入输出,再来定义unsigned char Counter=0;编译的时候就报错,这是什么原因呢?谢谢
错误信息:
E:\iccv7avr\bin\imakew -f DISPLAY.mak
    iccavr -c -e -D__ICC_VERSION="7.19" -D_EE_EXTIO -DATMega88-l -g -MHasMul -MEnhanced -Wa-W..\..\..\AVRDRA~1\project\3\main.c
!E C:\Downloads\AVRDRA~1\project\3\main.c(25): illegal statement termination
!E C:\Downloads\AVRDRA~1\project\3\main.c(25): skipping `unsigned' `char'
!E C:\Downloads\AVRDRA~1\project\3\main.c(25): undeclared identifier `Counter'

fandipeng412 发表于 2009-3-3 22:32:28

是不是編譯器的本身的問題呢,
本身作了限制,
在KEIL里也有類似的問題的

Gorgon_Meducer 发表于 2009-3-4 16:26:00

这不是编译器的问题,而是ANSI-C语法的限制。
在定义变量之前,不允许有任何其他执行语句。比如,在一个花括号内:

{
    unsigned char Counter = 0;
    DDRB = 0xFF;
}
就是正确的,但是
{
    DDRB = 0xFF;
    unsigned char Counter = 0;
}
就是错误的。C++则无此限制。

ilovezeno 发表于 2009-3-4 17:47:04

谢谢!

lovecsu 发表于 2009-3-4 22:37:31

学习了

honami520 发表于 2009-3-4 22:45:13

呵呵,我很早也发现这样的现象了,定义变量的语句必须在函数的最前面,不然编译不通过!

vgbird 发表于 2009-3-15 16:27:08

<<深入浅出>>附录G有讲 都很有用 可以看一看
页: [1]
查看完整版本: 请问傻孩子:我按照书中的例子实验,为什么调换2个定义语句的位置,编译器就会报错呢?