据我所知,不纯函数是那些在使用相同参数调用时并不总是返回相同值的函数(我一定是遗漏了什么,或者可能是错误的,如果我错了,请纠正我)。
那么为什么 printf()
被认为是一个不纯函数?
最佳答案
“纯”函数也没有副作用。
换句话说,无论您调用它多少次,纯函数只会影响其输出任何。
例如,foo
是不纯的,即使它返回零:
int x;
int foo() { x++; return 0; }
int bar() { return x; }
如果 foo
是纯的,调用它不会影响 bar()
的结果。
printf
是不纯的,因为它的结果有“副作用”——具体来说,它会在屏幕上(或在文件中等)打印一些东西。
如果它是纯净的,那么您可以调用它十亿次并确保不会发生任何不好的事情。
但是,如果您实际调用 printf
一百万次,那么对用户来说肯定会有所不同——它会填满他的屏幕(或磁盘空间,或其他)。很明显它不是纯净的。
此外:如果您的输出被重定向为您自己的输入(有点无用,但仍然如此),那么调用 printf
将影响您从 getchar
接收到的内容。 :) 所以它也可以通过这种方式直接观察到。
关于c - 为什么 printf() 是一个不纯的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11919894/