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