1. ホーム
  2. c++

[解決済み] この「()」は何ですか?

2023-03-25 11:03:51

質問

gccコンパイラのソースコード(gcc/c-family/c-pragma.c)を見ていると、次のようなことがわかります。

typedef struct GTY(()) align_stack {
  int                  alignment;
  tree                 id;
  struct align_stack * prev;
} align_stack;

と、C言語プログラミングの経験がたくさんあるにもかかわらず、これらのビットは (()) は私にはまだ全くわかりません。どなたか、これらの意味を説明していただけませんか?Googleはそれを見つけることができないようです。

どのように解決するのですか?

それらは GCC 内部の "magic" つまり、コンパイラの実装自体の一部です。

参照 このページ を参照してください。このマクロはガベージコレクションのために型をマークするために使われます。引数を指定することもできます。 このページ を参照してください。

アップデイト :: ご指摘の通り ドリュー・ドーマン によって指摘されたように、実際の二重括弧は GNU 実装の "内部性" の一部ではなく、呼ばれたマクロのために引数のリスト全体を単一の引数に集めたいときに一般的に使用されます。これは、例えば、次のようにラップするときに便利です。 printf() をラップするときにも便利です。 このテクニックの詳細については、この質問を参照してください。 .