2

循環バッファーを実装しましたが、ラップアラウンドを適切に処理しながら、バッファーポインターを更新する簡潔な手段が必要です。

サイズ10の配列を想定すると、私の最初の応答は次のようになります。

size_t ptr = 0;  
// do some work...
p = ++p % 10;

静的分析、およびgcc -Wall -Wextraは、シーケンスポイント違反による不特定の動作について、私の手首を正しく叩きました。明らかな修正は次のようなものです。

p++;
p %= 10;

しかし、私はこの操作を「カプセル化」するためのより簡潔なもの(つまり、ワンライナー)を探していました。提案?p++以外; p%= 10; :-)

4

3 に答える 3

7
p = (p + 1) % N;

またはモジュロを回避するには:

p = ((N-1) == p) ? 0 : (p+1);
于 2010-10-07T13:57:50.253 に答える
0

とは異なりp++; p%=10;、コンマ演算子を使用するp++, p%=10;と、「ワンライナー」としての資格が得られると思います。マクロ、ループの本体、または中括弧なしのif / elseステートメントで使用でき、結果の値に評価されますp

于 2010-10-07T16:11:21.580 に答える
-2

検討しましたか++p %= 10;

于 2010-10-07T14:26:47.767 に答える