数码之家

 找回密码
 立即注册
搜索
查看: 12906|回复: 8

[C51] keil5总是报错syntax error near 'void',请教怎么处理?

[复制链接]
头像被屏蔽
发表于 2019-5-23 17:02:55 | 显示全部楼层 |阅读模式

爱科技、爱创意、爱折腾、爱极致,我们都是技术控

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <STC89C5xRC.H>
#define  uchar unsigned char
    #define  uint   unsigned int
   
    void main()        
    {
      lcd_init(void);    //1602液晶显示初始化            就是在这一行,提示这一行报错。
        lcd1602_syb(1,1,"welcome to swpu");  //随便测试显示点
        lcd1602_num(2,1,12345);               //从第二行第一列开始显示
        lcd1602_float(2,9,-123.01);           //从第二行第9列开始显示
        while(1);
    }

void  lcd_init(void)        //初始化
{
    write_com(0x38);
        delay50us(100);    //延时5毫秒
        write_com(0x38);
        delay50us(100);     //延时5毫秒
        write_com(0x38);
        delay50us(100);     //延时5毫秒
        write_com(0x38);
        delay50us(100);     //延时5毫秒

        write_com(0x08);
        write_com(0x01);
        delay50us(100);     //延时5毫秒
        write_com(0x06);    //自左向右显示,显示内容不移动
        write_com(0x0c);      //开启显示 不显示光标
      lcd_clr();   //清屏
    }      
尝试模块化编程,但这里总是提示这个错误
Build target 'Target 1'
compiling 2019年5月23日main.c...
2019年5月23日MAIN.C(7): error C141: syntax error near 'void'
Target not created.
Build Time Elapsed:  00:00:00

网上说是哪里缺分号;了  可是我这个好像不缺啊。
请教问题是哪里出错了




发表于 2019-5-23 17:41:20 | 显示全部楼层
  lcd_init(void);    //1602液晶显示初始化            就是在这一行,提示这一行报错。

改成 lcd_init();
回复 支持 反对

使用道具 举报

头像被屏蔽
 楼主| 发表于 2019-5-23 17:48:01 | 显示全部楼层
简燕 发表于 2019-5-23 17:41
lcd_init(void);    //1602液晶显示初始化            就是在这一行,提示这一行报错。

改成 lcd_init() ...

好像也不行
#include <STC89C5xRC.H>
#define  uchar unsigned char
        #define  uint   unsigned int
       
        void main()               
        {
          lcd_init();    //            
                lcd1602_syb(1,1,"welcome to swpu");  //
                lcd1602_num(2,1,12345);               //
                lcd1602_float(2,9,-123.01);           //
                while(1);
        }

Build target 'Target 1'
compiling 2019年5月23日main.c...
2019年5月23日MAIN.C(7): warning C206: 'lcd_init': missing function-prototype
2019年5月23日MAIN.C(8): warning C206: 'lcd1602_syb': missing function-prototype
2019年5月23日MAIN.C(8): error C267: 'lcd1602_syb': requires ANSI-style prototype
Target not created.
Build Time Elapsed:  00:00:01

还是报错。
回复 支持 反对

使用道具 举报

发表于 2019-5-23 17:52:15 | 显示全部楼层
本帖最后由 简燕 于 2019-5-23 17:54 编辑

1.把需要用到的函数全部添加到当前文件,main()函数放在代码最末尾
2.在现有的代码,main()之前,添加全部所需函数原型描述.

二选一.
回复 支持 反对

使用道具 举报

发表于 2019-5-23 20:03:49 | 显示全部楼层
void  lcd_init(void) ;
在调用之前申明函数
函数的具体定义可以放到后面
回复 支持 反对

使用道具 举报

发表于 2019-5-24 12:23:38 | 显示全部楼层
其实简单点处理就是把void main()   函数放在整个程序的最后。
一般来说如果不提前声明函数,那就遵守后面的可以调用前面的,不会出怪问题。
回复 支持 反对

使用道具 举报

发表于 2019-5-26 12:15:49 | 显示全部楼层
写后面的函数要先申明
回复 支持 反对

使用道具 举报

发表于 2019-5-26 12:58:46 | 显示全部楼层
应该就是函数位置或函数声明的问题,没有模块的工程所有函数按照调用的顺序排列,主函数在最末尾会免除好多问题,有模块的工程在其他模块中调用时先声明后调用。
回复 支持 反对

使用道具 举报

头像被屏蔽
 楼主| 发表于 2019-5-26 13:50:51 | 显示全部楼层
慕名而来 发表于 2019-5-26 12:58
应该就是函数位置或函数声明的问题,没有模块的工程所有函数按照调用的顺序排列,主函数在最末尾会免除好多 ...

好的,谢谢了。字数
回复 支持 反对

使用道具 举报

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

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-5-9 02:39 , Processed in 0.109200 second(s), 8 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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