例:
struct dummy
{
int var;
};
なぜこのような構造が使われるのでしょうか? ほとんどの場合、いくつかのヘッダー ファイルでそれらを見てきました。
atomic_t
型もこのように定義されています。次を使用して単純に定義できませんか:
typedef int atomic_t;
より拡張可能です。
struct dummy
将来、に name フィールドを含める必要があることに気付いたと仮定すると、その定義を次のように変更できます。
struct dummy
{
int var;
char name[30];
};
アプリケーション コードの多くを変更する必要はありません。
32 ビットで表現できるすべてのものを数値として扱う必要はありません。数値を持つものでさえ、特別な処理が必要であることを示唆するセマンティクスを持つ場合があります。たとえば、プロセッサに「アトミック インクリメント」命令があるが、「通常の」インクリメント命令よりも遅いとします。ある場所でアトミックにインクリメントfnord
し、別の場所でデクリメントしたい場合は、次を使用できます。
volatile int fnord;
...
atomic_inc(&fnord);
...
atomic_dec(&fnord);
ただし、これに関する問題は、インクリメントするはずの場所の 1 つがfnord
たまたまfnord++
ではなく使用されている場合atomic_inc(&fnord);
、コンパイラは「通常の」インクリメント命令を完全に喜んで生成し、コードはほとんどの場合機能する可能性がありますが、追跡が困難な方法で失敗する可能性があります。
を構造体に置き換える(およびそれを操作するインライン関数をint
定義する) と、コンパイルなどのエラー コードを防ぐことができます。それを防ぐことはできませんが、プログラマーが構造を調べて、それをインクリメントする正しい方法を確認する機会を与えてくれます。atomic_inc
fnord++;
fnord.var++;
おそらく以前の構造には追加の要素があったため、ほとんどの場合、互換性を維持するためです。
または、後で他の要素を追加することを意図している可能性があります。(または、構造の内部バージョンでさえ、複数のメンバーを持ちます ( atomic_t
-type について私が実際に想像できることです。)