¿Qué implica "#define _GNU_SOURCE"?

Hoy tuve que usar elbasename() función, y laman 3 basename (aqu) me dio un mensaje extraño:

Notas

Hay dos versiones diferentes debasename () - el POSIX versión descrita anteriormente, y laGNU versión, cuál obtiene después de

#define _GNU_SOURCE
#include <string.h>

Me pregunto qué es esto#define _GNU_SOURCE significa: ¿es contaminando el código que escribo con una licencia relacionada con GNU? ¿O simplemente se usa para decirle al compilador algo como "Bueno, lo sé, este conjunto de funciones no es POSIX, por lo tanto no es portátil, pero me gustaría usarlo de todos modos ".

Si es así, ¿por qué no dar a las personas diferentes encabezados, en lugar de tener que definir alguna macro oscura para obtener la implementación de una función u otra?

Algo también me molesta: ¿cómo sabe el compilador qué implementación de función vincular con el ejecutable? ¿Utiliza esto#define ¿también

¿Alguien tiene algunos consejos para darme?

Respuestas a la pregunta(4)

Su respuesta a la pregunta