What do the parentheses around a function name mean?

c, function, parentheses

Solution

In the absence of any preprocessor stuff going on, `foo`'s signature is equivalent to

int foo (int *bar)

The only context in which I've seen people putting seemingly unnecessary parentheses around function names is when there are both a function and a function-like macro with the same name, and the programmer wants to prevent macro expansion.

This practice may seem a little odd at first, but the C library sets a precedent by providing some macros and functions with identical names.

One such function/macro pair is `isdigit()`. The library might define it as follows:

/* the macro */
#define isdigit(c) ...

/* the function */
int (isdigit)(int c) /* avoid the macro through the use of parentheses */
{
  return isdigit(c); /* use the macro */
}

Your function looks almost identical to the above, so I suspect this is what's going on in your code too.

Problem

In one of my project source files, I found this C function definition: ``` int (foo) (int *bar) { return foo (bar); } ``` Note: there is no asterisk next to `foo`, so it's not a function pointer. Or is it? What is going on here with the recursive call?

Original source