utilidad del nombre de la función en paréntesis excluyendo los parámetros

Me tropecé con un trozo de código extraño que pensé que no funcionaría de la forma prevista, pero lo hizo. Ejemplo:

#include  #include  int main(void) { printf("%d\n", abs(-1)); // output: 1 printf("%d\n", (abs)(-1)); // output: 1 return 0; } 

Aparentemente, poner paréntesis alrededor del nombre de la función en una llamada de función no tiene efecto en el progtwig. Simplemente lo hace parecer un elenco.

Estoy un poco interesado si esto se define de alguna manera. Pero me imagino que simplemente no está prohibido y por eso funciona.

Lo que realmente siento curiosidad es si hay un caso en el que este tipo de notación pueda generar una ventaja de cualquier tipo. (estructura del código, legibilidad, cualquier cosa que pueda ser útil para)

¿O es solo una forma “extraña” de escribir código?

Tratar

 int foo(int a, int b) { return a+b; } #define foo(a,b) ((a)+(b)+1) #include  int main() { printf("%d %d\n", foo(3, 5), // Use macro if defined (foo)(3, 5) // Always call function even if there's a macro ); return 0; } 

Salida:

 9 8 

¿Ver la diferencia?