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

Linux kernel 稀疏警告:分配中的类型不正确,linux-kernel,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_下一个_条目的声明如下所示: struct ipt_entry *e; static inline __pure

我正在尝试制作补丁,但从未遇到过此类警告:

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_下一个_条目的声明如下所示:

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做什么?我能做什么?我在哪里可以读到这方面的东西?我在网上真的找不到任何东西

来自

返回值仅取决于参数和/或全局变量。 这样的函数可以接受公共子表达式消除和 循环优化就像算术运算符一样。这些 函数应该用pure属性声明。例如 整数平方(int)属性((纯));假设函数square的调用次数比 节目说

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

在早于的GCC版本中未实现属性pure 2.96.许多函数除了返回值及其

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

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


阅读这篇lwn文章的更多内容:

很快就发现了这一点:它是一个扩展到
\uuuuuu属性((纯))
的宏,您可以在源代码中看到它。所以谢谢你的回答!很高兴你能帮忙!阅读
lwn
这篇文章,它很好地解释了这些属性。现在就这样做。我明白我必须做什么,我必须修改什么。我为什么要这么做。谢谢