Сегодня мне пришлось использовать функцию basename(), а man 3 basename (здесь) дал мне странное сообщение:
Примечания
Существуют две разные версии basename() - версия POSIX, описанная выше, и версия GNU, которую можно получить после
#define _GNU_SOURCE#include <string.h>
Мне интересно, что означает этот #define _GNU_SOURCE: это заражает код, который я пишу, с лицензией, связанной с GNU? Или это просто используется, чтобы сказать компилятору что-то вроде "Ну, я знаю, этот набор функций не POSIX, поэтому он не переносимый, но я бы все равно его использовал".
Если да, почему бы не дать людям разные заголовки, вместо того, чтобы определять какой-то неясный макрос, чтобы получить одну реализацию функции или другую?
Что-то меня также менячет: как компилятор знает, какая реализация функции связана с исполняемым файлом? Использует ли он этот #define?
У кого-нибудь есть указатели, чтобы дать мне?