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