c - 为什么 printf() 是一个不纯的函数?

标签 c printf purely-functional

据我所知,不纯函数是那些在使用相同参数调用时并不总是返回相同值的函数(我一定是遗漏了什么,或者可能是错误的,如果我错了,请纠正我)。

那么为什么 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/

相关文章:

c - 将指针存储到 map 中

使用C将当前毫秒转换为时间格式

c++ - 打印 __float128,不使用 quadmath_snprintf

c - C 规范中 float 的最大位数

java - 可以选择在纯函数中调用副作用

c - 输出 C 端错误

c++ - 如何在 C++ 代码中将我的 printf 语句限制为每行 80 个字符?

C: 无法让 fprintf 打印到输出文件

unit-testing - 具有副作用的 F# UnitTesting 函数

haskell - 差异列表的显式纯函数数据结构