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