【发布时间】:2019-12-04 13:24:35
【问题描述】:
我正在学习副作用和纯函数。我知道纯函数没有副作用,并且它们的返回值对于相同的参数是相同的。我想知道C函数strcmp()是否是纯函数。我相信它是纯粹的,因为给定相同的两个字符串作为参数,结果总是相同的。此外,strcmp() 不修改任何变量或调用任何函数,因此它没有任何副作用。
但是我不确定我的推理是否正确。
【问题讨论】:
-
given the same two strings as parameters你不给字符串,你给指针。 -
@KamilCuk 嗯,这很有趣。如果您向
strcmp提供相同的指针,则不一定会得到相同的结果,因为在这些末尾可能会有不同的数据。而且,如果您将指针指向相同的 strings,则对于strcmp而言,这不一定是相同的输入值。 -
例如 gcc 编译器有“const”和“pure”function attribute。在该描述中,
memcmp可能是“纯”,但可能不是“常量”。 “const”函数无法访问指针后面的值。 -
@KamilCuk
memcmp和strcmp都有相同的“纯粹性”问题,因为它传递了指向数据的指针。两个调用可能具有相同的指针,但如果指针指向的数据在调用之间发生了变化,则可能会给出不同的结果。这使得它们在某种程度上不纯。
标签: c functional-programming strcmp side-effects