今天我在读有关“纯函数”的内容时,对它的使用感到困惑:
如果一个函数对于相同的输入返回相同的输出,并且没有任何可观察到的副作用,则称其为“纯函数”。
例如,strlen()
是一个纯函数,而rand()
则是不纯的。
__attribute__ ((pure)) int fun(int i)
{
return i*i;
}
int main()
{
int i=10;
printf("%d",fun(i));//outputs 100
return 0;
}
如果没有更改输出,那么上面的程序的行为与没有 pure
声明的函数行为相同。
如果没有更改输出,声明一个函数为 pure
有什么好处呢?
printf
就符合条件(使用相同参数两次调用将产生相同的返回值),但它并不是纯的。 - tdammers