Tratar a __func__ como un literal de cadena en lugar de un identificador predefinido

Estoy usando gcc para compilar el código C99. Quiero escribir una macro que devuelva una cadena que contenga el nombre de la función y el número de línea.

Esto es lo que tengo:

#define INFO_MSG  __FILE__ ":"__func__"()"

Sin embargo, cuando compilo un código que intenta usar esta cadena, por ejemplo:

char buff[256] = {'\0'}
sprintf(buff, "Something bad happened here: %s, at line: %d", INFO_MSG, __LINE__);
printf("INFO: %s\n", buff);

Recibo el siguiente mensaje de error:

error: expected ‘)’ before ‘__func__’

He rastreado el problema hasta la macro. como cuando quito__func__ Desde la macro, el código se compila correctamente.

¿Cómo puedo corregir la macro, para que pueda incluir el predefinido__func__ macro en mi cadena?

Respuestas a la pregunta(4)

Su respuesta a la pregunta