稀疏警告:分配中的类型不正确

时间:2014-04-14 23:23:42

标签: linux-kernel

我正在尝试修补但我从未遇到过这种警告:

warning: incorrect type in assignment (different modifiers)
expected struct ipt_entry *[assigned] e
got struct ipt_entry [pure] *

此时出现此错误:

e = ipt_next_entry(e);

虽然e和ipt_next_entry的声明如下所示:

struct ipt_entry *e;

static inline __pure
struct ipt_entry *ipt_next_entry(const struct ipt_entry *entry)
{
       return (void *)entry + entry->next_offset;
}

我的问题是: __pure有什么作用?我能做什么?我在哪里可以读到这个?我真的在互联网上找不到任何东西。

1 个答案:

答案 0 :(得分:2)

来自http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html

  

     

返回值仅取决于参数和/或全局变量。   这样的功能可以受到共同的子表达式消除和   循环优化就像算术运算符一样。这些   函数应该使用pure属性声明。例如,             int square(int) attribute ((pure));他说,假设的函数square可以安全地拨打少于的次数   节目说。

     

纯函数的一些常见示例是strlen或memcmp。   有趣的非纯函数是具有无限循环或函数的函数   那些取决于易失性存储器或其他系统资源的那些可能   在两个连续调用之间切换(例如多线程中的feof)   环境)。

     

属性pure在早期的GCC版本中未实现   2.96。除了返回值及其

之外,许多功能都没有效果

基本上它附加在读取全局内存的函数中,不会修改任何内容。例如,strlen()函数只读取指针并返回字符串的长度,它不会修改实际的字符串。
另一方面,strcpy()确实修改了其中一个指针指向的内存。

  

这些属性(pure,const等)有助于编译器了解a的一些语义含义   函数调用,以便它可以应用比正常更高的优化   功能

阅读这篇文章:http://lwn.net/Articles/285332/