What is this (( ))?
While browsing through the gcc compiler source code (gcc/c-family/c-pragma.c) I see:
typedef struct GTY(()) align_stack {
int alignment;
tree id;
struct align_stack * prev;
} align_stack;
and regardless of having lots of C programming years behind me, these bits: (())
are totally unknown to me yet. Can someone please explain what they mean? Google does not seem to find it.
Solution 1:
They are GCC internal "magic", i.e. part of the compiler implementation itself.
See this page which talks about their use. The macro is used to mark types for garbage-collection purposes. There can be arguments too, see this page for details.
UPDATE:: As pointed out by Drew Dorman in a comment, the actual double parenthesis are not part of the "internalness" of the GNU implementation; they're commonly used when you want to collect an entire list of arguments into a single argument for the called macro. This can be useful sometimes when wrapping e.g. printf()
, too. See this question, for more on this technique.
Solution 2:
In general, it's used with macros to shield commas. Given #define foo(a,b)
, the macro invocation foo(1,2,3)
would be illegal. Using an extra pair of parenthesis clarifies which comma is shielded: foo((1,2),3)
versus foo(1,(2,3))
.
In this case, the GTY
can take multiple arguments, separated by commas, but all these commas must be shielded. That's why the inner ()
surround all arguments.