我正在尝试理解纯函数,并且一直在阅读有关该主题的维基百科文章。我编写的最小示例程序如下:
#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))
正确吗?如果是这样,为什么它编译时没有任何错误或警告,即使使用-Wextra
and-Wall
标志?
提前致谢!