我正在尝试修补但我从未遇到过这种警告:
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有什么作用?我能做什么?我在哪里可以读到这个?我真的在互联网上找不到任何东西。
答案 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的一些语义含义 函数调用,以便它可以应用比正常更高的优化 功能