想象一下下面的代码:
static char myFlag;
void setFlagTo_1(void)
{
myFlag = 1;
}
char hasFlagChangedTo_1(void)
{
char retval = myFlag;
myFlag = 0;
return retval;
}
如何描述名为hasFlagChangedTo_1
. 你会如何称呼/描述这个动作?
想象一下下面的代码:
static char myFlag;
void setFlagTo_1(void)
{
myFlag = 1;
}
char hasFlagChangedTo_1(void)
{
char retval = myFlag;
myFlag = 0;
return retval;
}
如何描述名为hasFlagChangedTo_1
. 你会如何称呼/描述这个动作?
我会这样写:
void clearFlag(char *oldValue)
{
if (oldValue)
*oldValue = myFlag;
myFlag = 0;
}
当您调用该函数时,您可以通过NULL
. 但是,如果您传递一个指向变量的指针,您可以命名该变量,以便调用站点上的代码清楚地表明正在发生的事情。
clearFlag(&oldValue);
使用返回值的函数的问题在于,您通常使用返回值的名称来命名这些函数。但是,如果该功能具有强烈的副作用,则不会在名称中体现出来。
当有副作用时,使用void
描述副作用的函数和名称通常是个好主意。
我会调用这样的函数retrieveFlag
。
当它在那里时,你会检索它,所以之后它就不再存在了。当它不存在时,它返回 false。
编辑:或者只是称呼它getAndResetFlag
-完全按照锡上所说的那样做。
我将其称为testAndClear
testAndSet 函数的模拟...
ResetFlag , 因为它正在重置标志值