1

__COUNTER__ソース ファイルごとに 1 回だけマクロを展開するマクロを作成しようとしています。マクロが展開でどのように機能するかを完全に理解していますが、これには問題があります。__COUNTER__ファイルの先頭で一度マクロを展開したいのですが、その定義への各参照は__COUNTER__次の番号に展開されません。

__COUNTER__そのため、単一の値に完全に展開し、その 1 つの値を現在の作業ソース ファイル全体で一貫して使用したいと考えています。

Cで使用できる機能しか使用できません。

4

1 に答える 1

2

拡張機能 (gcc ファミリーの__COUNTER__コンパイラーを使用していると思われます) は、そのような用途にはあまりにも制限されています。難しいのは、それを別のマクロ、たとえば に入れるとTOTO、定義時に展開されず、使用時にのみ展開されることです。したがって、 を呼び出すたびTOTOに、カウンターの新しい値が生成されます。

P99には、これに代わるポータブルな代替品があります。これは、いくつかのハッカーでその目標を達成し#includeます。P99_FILEID次に、ファイルごとの識別子でありP99_LINEID、コンパイル単位のすべての行に対して一意である必要がある ID です (ただし、注意して使用してください)。

コンパイル時の定数だけが必要で、プリプロセッサ自体に何も必要ない場合の別の方法は、列挙定数でカウンタを使用することです。

enum { toto_id = __COUNT__, }; 
于 2013-07-25T14:55:07.693 に答える