-1

次のコードを想像してください。

static char myFlag;

void setFlagTo_1(void)
{
  myFlag = 1;
}

char hasFlagChangedTo_1(void)
{
  char retval = myFlag;

  myFlag = 0;

  return retval;
}

という名前の関数をどのように説明しますかhasFlagChangedTo_1。このアクションをどのように呼び出し/説明しますか?

4

4 に答える 4

2

私はそのような関数を呼び出しますretrieveFlag

そこにあるときはそれを回収するので、その後はもうそこにはありません。存在しない場合は false を返します。

編集:または単にそれを呼び出しますgetAndResetFlag-缶に書かれていることを正確に行います.

于 2012-12-19T12:40:32.890 に答える
2

私は次のように書きます:

void clearFlag(char *oldValue)
{
    if (oldValue)
        *oldValue = myFlag;
    myFlag = 0;
}

関数を呼び出すと、 を渡すことができますNULL。しかし、変数へのポインターを渡す場合は、その変数に名前を付けて、呼び出しサイトのコードで何が起こっているかを明確にすることができます。

clearFlag(&oldValue);

値を返す関数を使用する際の問題は、通常、返される値の名前でそれらの関数に名前を付けることです。ただし、関数に強い副作用がある場合、それは名前に反映されません。

副作用がある場合は、副作用voidを説明する関数と名前を使用することをお勧めします。

于 2012-12-19T12:38:03.317 に答える
1

私はそれtestAndClearをそのtestAndSet-functionsに類似したものと呼びます...

于 2012-12-19T12:42:03.763 に答える
0

ResetFlag 、フラグ値をリセットしているため

于 2012-12-19T12:40:54.913 に答える