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>头文件。在 或者 中有:
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);代替即可。这样就能通过编译了。
在一个国外的网站上查到了,和上面的解决方法一样:
Code: Code:
int ret = unregister_chrdev ( Major, DEVICE_NAME ); if( ret < 0 ) printk("Error in unregister_chardev : %d ",ret);Code: int ret = unregister_chrdev ( Major, DEVICE_NAME ); if( ret < 0 ) printk("Error in unregister_chardev : %d ",ret);
Code: Code:
unregister_chrdev ( Major, DEVICE_NAME );
网址:Code: unregister_chrdev ( Major, DEVICE_NAME ); 网址: