I have seen function declarations that look like this

Q

I've seen function declarations that look like this:

extern int func __((int, int));

What are those extra parentheses and underscores for?

✍: Guest

A

They're part of a trick which allows the prototype part of the function declaration to be turned off for a pre-ANSI compiler. Somewhere else is a conditional definition of the __ macro like this:

#ifdef __STDC__

#define __(proto) proto

#else

#define __(proto) ()

#endif

The extra parentheses in the invocation

extern int func __((int, int));

are required so that the entire prototype list (perhaps containing many commas) is treated as the single argument expected by the macro.

2015-05-23, 1140👍, 0💬