error: void value not ignored as it ought to be

   在编译字符设备驱动文件时出现了一个 error: void value not ignored as it ought to be 错误。 本人表示非常恼火。问题出在:

 int ret = unregister_chrdev(Major,DEVICE_NAME); 

 编译器检测到在<linux/fs.h>文件中,unregister_chrdev函数没有返回值。

 而我在搜了一下<linux/fs.h>头文件。在http://students.mimuw.edu.pl/SO/Linux/Kod/include/linux/fs.h.html  或者 http://lxr.linux.no/linux-bk+v2.6.10/include/linux/fs.h 中有:

 extern int unregister_chrdev(unsigned int major, const char * name);
明明是有返回值的。但是这里编译器又为什么报错呢?

解决办法一:

ret = unregister_chrdev(MAJOR, DEVICE_NAME);

  当注销此行时可以编译通过,找到linux/fs.h头文件,里面定义了unregister_chrdev()函数:

  extern void unregister_chrdev(unsigned int,const char *);

  此处定义的为void类型函数,而在程序中将其赋值给了ret,这就造成了编译错误。

  于是注释了相应的代码,用unregister_chrdev(MAJOR, DEVICE_NAME);代替即可。这样就能通过编译了。

 http://www.linuxidc.com/Linux/2010-02/24622.htm

在一个国外的网站上查到了,和上面的解决方法一样:

Code:
int ret    = unregister_chrdev ( Major, DEVICE_NAME );
    
    if( ret < 0 )
        printk("Error in unregister_chardev : %d \n",ret);
to simply
Code:
unregister_chrdev ( Major, DEVICE_NAME );
网址:http://ubuntuforums.org/showthread.php?t=1845120
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值