打印

请教一个关于C语言的问题。

[复制链接]
1922|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cxj4616685|  楼主 | 2010-12-2 10:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
cxj4616685|  楼主 | 2010-12-2 10:56 | 只看该作者
我怎么也想不通,为什么编译的时候不报错呢。

使用特权

评论回复
板凳
focuson| | 2010-12-2 11:04 | 只看该作者
本帖最后由 focuson 于 2010-12-2 11:07 编辑

未检测出来,那么编译软件有问题。

因为函数在C语言里面其实就是地址指针。

#typedef (*void) myfunc()

所以你的编译软件初始化为 0 地址。就是说,调用这地址,PC就跑到 0x0000这位置去了。你看到就是复位。

使用特权

评论回复
地板
ayb_ice| | 2010-12-2 11:15 | 只看该作者
这和编译器有直接关系

有些编译器遇到未定义函数就直接转到某个地址运行,一般是复位向量

使用特权

评论回复
5
liang7143| | 2010-12-2 14:52 | 只看该作者
编译器的问题

使用特权

评论回复
6
无限星空| | 2010-12-2 17:13 | 只看该作者
1# cxj4616685
如果是编译器的问题,keil里面没有此问题的

使用特权

评论回复
7
zdhlixiang2006| | 2010-12-3 22:10 | 只看该作者
把程序贴上来,你这种问题太奇怪了

使用特权

评论回复
8
必有我师| | 2010-12-4 19:25 | 只看该作者
我说说的的见解吧,我感觉,你是使用了一个库函数。你换换函数名再试试。

使用特权

评论回复
9
cxj4616685|  楼主 | 2010-12-7 15:29 | 只看该作者
我换过函数了 用的就是keil

使用特权

评论回复
10
cxj4616685|  楼主 | 2010-12-7 15:31 | 只看该作者
#include<reg52.h>    //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include<stdio.h>
#include<intrins.h>
#include "8X16.h"
#include "GB1616.h"        //16*16汉字字模
#include "红外.h"
#include"ILI9163.h"


//=========================================主程序========================================//
void main()
{
EX0init(); //初始化外部中断
TIM0init();//初始化定时器
UARTinit();
Ini_ILI9163();
   display_dot(0xff,0xff);   //white FULL
while(1)//主循环
   {
    if(irok)                        //如果接收好了进行红外处理
          {   
           Ircordpro();
           irok=0;
          }

    if(irpro_ok)                   //如果处理好后进行工作处理,如按对应的按键后显示对应的数字等
          {       
          Ir_work();
          {
        switch(color)
        {
           case 9:LCD_PutString(left,top,num,0x0000,0xffff);break;                   
           case 1:display_dot(0xf8,0x00);break;   //RED FULL
           case 2:display_dot(0x07,0xe0);break;   //green FULL
           case 3:display_dot(0x00,0x1f);break;    //blue FULL
           case 4:display_dot(0x00,0x00);break;   //black FULL
           case 5: pouse();break;   //white FULL
           case 6:grayscale();break;
           case 7:displayshow();break;
           case 8:LCD_PutString(5,3,"my name is cxj",0x07e0,0xffff);
                  LCD_PutString(10,23,"I LOVE MY JOB ",0x07e0,0xffff);
                          LCD_PutString(0,43,"上海浩豚电子科技",0x001f,0xffff);
                          LCD_PutString(0,63,"专业技术支持论坛",0x07e0,0xffff);
                          LCD_PutString(0,83,"专业开发板工控板",0x001f,0xffff);
                          LCD_PutString(0,103,"01234567",0x001f,0xf800);
                          LCD_PutString(64,103,"89abcdef",0x07e0,0xffff);
                          LCD_PutString(0,123,"ghijklmnopqrstuv",0xffff,0x0000);
                          LCD_PutString(0,143,"`,./<>';:[]{}\|?)",0x0000,0xffff);break;
       default: break;
           }
      
       }          
            }
   }
}

使用特权

评论回复
11
cxj4616685|  楼主 | 2010-12-7 15:33 | 只看该作者
我case 5后面的那个函数没有定义 执行到case5 之后就自动复位了

使用特权

评论回复
12
cxj4616685|  楼主 | 2010-12-7 15:41 | 只看该作者
计算器.C(39): warning C206: 'pouse': missing function-prototype
为什么是warning 不是error

使用特权

评论回复
13
必有我师| | 2010-12-10 12:27 | 只看该作者
哦,我知道了,你的这个函数未定义,在VC6.0中编译会报错,但是在KEIL C中,不会报错,只会提醒说有警告,三楼说的很好呀。

使用特权

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

本版积分规则

0

主题

14

帖子

1

粉丝