单片机C语言 keilc 编写的问题

2019-03-24 19:44发布

#include<stdio.h>#include<reg51.h>//实例12:用自增运算控制P0口8位LED流水花样#include<reg51.h>   //包含单片机寄存器的头文件/******************************************************函数功能:延时一段时间******************************************************/void delay(void) {   unsigned int i;   for(i=0;i<20000;i++)    ;}/******************************************************函数功能?:主函数******************************************************/void main(void)  {         P2=0X12;   unsigned char i;        for(i=0;i<255;i++)  //注意i的值不能超过255    {  P0=i;    //将i的值送P0口  delay(); //调用延时函数}}
这个程序我都看得懂  但是就是编译不通过  提示为:NEW.C(20): error C141: syntax error near 'unsigned' 但是若是我把程序的P2=0X12;这个放到下面   就ok了  这是正确的:#include<stdio.h>#include<reg51.h>//实例12:用自增运算控制P0口8位LED流水花样#include<reg51.h>   //包含单片机寄存器的头文件/******************************************************函数功能:延时一段时间******************************************************/void delay(void) {   unsigned int i;   for(i=0;i<20000;i++)    ;}/******************************************************函数功能?:主函数******************************************************/void main(void)  {        unsigned char i;   P2=0X12;   for(i=0;i<255;i++)  //注意i的值不能超过255    {  P0=i;    //将i的值送P0口  delay(); //调用延时函数}} 问这是怎么回事  是keilc的BUG么 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
8条回答
辛昕
2019-03-25 15:44
LZ兄弟,你无意猜中了一颗地雷。

C语言的标准是ANSI C,这些标准呢,并不是一成不变的。
这个俺不是很清楚,不过你的这个问题俺碰到过,当时在KEIL里我也不知道怎么回事,后来有一次在gcc里遇到,我终于知道了为什么。

如果2 3 4 L的三位大大说的这样。
一般情况下,在一个函数体,我们都是首先完成变量定义,再来写语句。
但是,有时候,我们会看到这种很操蛋但是感觉很爽的写法,比如这个

for(int i = 0;i < 3;i++)
.....

多爽啊!是的,刚开始看到这样的写法我也激动了好久,多好,啥时候想循环就定义一个循环变量。
然而,很抱歉的说,这是C99的标准中新增加的内容,在VC上我试过没啥问题,但是在其他大多数基于标准C,好像是8几年制定的。就对这个不感冒。

另外说一句:C99是个不太受欢迎的标准,比如说,我们的keil和GCC就不鸟他。

一周热门 更多>