我正在尝试理解纯函数,并且一直在阅读有关该主题的维基百科文章。我编写的最小示例程序如下:
#include <stdio.h>
static int a = 1;
static __attribute__((pure)) int pure_function(int x, int y)
{
return x + y;
}
static __attribute__((pure)) int impure_function(int x, int y)
{
a++;
return x + y;
}
int main(void)
{
printf("pure_function(0, 0) = %d\n", pure_function(0, 0));
printf("impure_function(0, 0) = %d\n", impure_function(0, 0));
return 0;
}
我用 编译了这个程序gcc -O2 -Wall -Wextra,期望impure_function()用__attribute__((pure)). 但是,我没有收到任何警告或错误,并且程序也没有问题地运行。
标记impure_function()不__attribute__((pure))正确吗?如果是这样,为什么它编译时没有任何错误或警告,即使使用-Wextraand-Wall标志?
提前致谢!