打印

关于函数返回值的问题

[复制链接]
2138|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
chy2001743|  楼主 | 2008-11-7 10:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
自己声明了一个bdata存放可以位寻地的字节,可是碰到了意想不到的情况,程序如下:

uchar bdata datbyte;
.....
uchar read_ds()       //这个函数用来从dsio脚中读取一个字节存进datbyte中。
{
uchar i;
for(i=0;i<8;i++)
{
  datbyte=datbyte>>1;
  datbyte7=dsio;
  dsscl=1;
  dsscl=0;
}
return(datbyte);              //我是想返回 datbyte这个已经存放好了8位dsio位数据的一个字节可是编译后老是提示return-expression on void-function. 就是说return表达不正确的意思吧?
}

请问怎么样解决这个问题。

相关帖子

沙发
chen3bing| | 2008-11-7 11:10 | 只看该作者

你用的什么编译软件

我在keil uVision2中编译没问题。

使用特权

评论回复
板凳
chy2001743|  楼主 | 2008-11-7 11:13 | 只看该作者

回2楼

我用的是keil uVison3 

使用特权

评论回复
地板
chy2001743|  楼主 | 2008-11-7 11:20 | 只看该作者

谢2楼热心提示

我刚刚将这段程序独立出来运行编译却又没有出错,为什么放入整个程序中会有错误提示呢。

使用特权

评论回复
5
学生D| | 2008-11-7 13:01 | 只看该作者

全局变量是不必返回的。

你的datbyte变量设定为了全局变量。它具有全程序作用域,所有模块都能看得到它,并使用它。并不单隶属于 read_ds() 函数。没必要return;              

return( ); 返回的应该是局部变量。

除非你把uchar bdata datbyte;  放到uchar read_ds() 函数内部成为局部变量。才可以写成
return (datbyte );                      

使用特权

评论回复
6
xuehongren| | 2008-11-7 16:56 | 只看该作者

5楼应该是正解

使用特权

评论回复
7
xwj| | 2008-11-7 17:17 | 只看该作者

当然可以返回的

自己去检查前面是否有void read_ds();的声明

使用特权

评论回复
8
ayb_ice| | 2008-11-7 21:06 | 只看该作者

返回是没有问题的

检查函数声明与定义是否一致

使用特权

评论回复
9
呆板书生| | 2008-11-8 08:40 | 只看该作者

uchar read_ds()

C 会编译成 uchar int read_ds()

使用特权

评论回复
10
学生D| | 2008-11-8 11:14 | 只看该作者

请教一点。

假定如7楼、8楼所说,“变量datbyte 是可以返回的”。

众所周知,return 的char值必然是在当前using寄存器区的R7中返回,而楼主所定义的全局变量uchar bdata datbyte;在位变量区。把位变量区的bdata datbyte送到R7再返回,......编译器是不是在质疑这个问题?

使用特权

评论回复
11
ayb_ice| | 2008-11-8 13:26 | 只看该作者

我试了一下没有任何问题

我试了一下没有任何问题,其实提示已经说了是函数声明不正确.

使用特权

评论回复
12
chy2001743|  楼主 | 2008-11-14 11:01 | 只看该作者

调试出来了

  过了几天了忘记回这个帖子啦。不好意思
  根据编译后的结果,推断编译器质疑的问题可能是:函数返回的是一个unsigned char 类型的数据,可是调用函数没有声明是 unsigned char read_ds();
  
  当我声明了以后,函数就可以用了。
  全局变量不需要返回值了,不过是不需要吧。因为我把datbyte改成默认的ACC也行。
  谢谢 学生D & ayb_ice & xwj 

使用特权

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

本版积分规则

2

主题

9

帖子

0

粉丝