微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

奇怪的gcc警告行为

我正在开发一个linux驱动程序,并且我收到了这个警告消息:

/home/andrewm/pivot3_scsif/pivot3_scsif.c:1090: warning: ignoring return value of 'copy_from_user',declared with attribute warn_unused_result

违规行是:

if (copy_from_user(tmp,buf,count) < 0)

在检查copy_from_user的声明后,我发现它返回一个unsigned long ,所以显然比较总是失败,所以返回值不会影响比较。 这部分是有道理的,但为什么海湾合作委员会也不警告这是一个签名/无符号比较的事实? 这只是一个编译器的特点? 还是它避免两次相同的expression警告?

包含该行的函数是:

错误常数EMEDIUMTYPE的含义

如何检测是否安装了MysqL

系统托盘图标不显示在Qt5(Linux / LXDE)

Windows 8的备份/恢复应用程序

Qt:打印原始文本

int proc_write(struct file *f,const char __user *buf,unsigned long count,void *data) { char tmp[64]; long value; struct proc_entry *entry; if (count >= 64) count = 64; if (copy_from_user(tmp,count) < 0) { printk(KERN_WARNING "pivot3_scsif: Failed to read from user buffer %pn",buf); return (int)count; } tmp[count - 1] = ''; if (tmp[count - 2] == 'n') tmp[count - 2] = ''; ... }

在64位Red Hat上使用gcc 4.4.1(在公司服务器上,我没有升级的select)。

将窗体设置为窗口的所有者

保持Windows服务运行没有计时器

asp.net中提示窗口types的提示

文件描述符轮询

g ++ 4.6.1编译器错误错误:未知的伪操作:`.cfi_personality'

它似乎是一个编译器选项http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html :

-Wno-unused-result Do not warn if a caller of a function marked with attribute warn_unused_result (see Function Attributes) does not use its return value. The default is -Wunused-result. .... -Wtype-limits Warn if a comparison is always true or always false due to the limited range of the data type,but do not warn for constant expressions. For example,warn if an unsigned variable is compared against zero with '<' or '>='. This warning is also enabled by -Wextra.

是的,这可能只是一个编译器怪癖。 这个警告大概是在语法优化几个步骤之后产生的,其中if()表达式被消除了(因为条件总是为真),留下了空的函数调用。 找到这种行为是相当常见的。 同样有一些警告条件只有在启用优化的情况下编译时才会发出。

你似乎已经想出了自己的解决方案。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐