Сьогодні мені довелося скористатися basename()
функцією, і man 3 basename
( тут ) дав мені якесь дивне повідомлення:
Примітки
Існують дві різні версії базового імені () - версія POSIX, описана вище, і версія GNU , яку отримує після
#define _GNU_SOURCE
#include <string.h>
Я цікаво , що це #define _GNU_SOURCE
означає: чи є він заражаючи код я пишу з GNU-пов'язаної ліцензії? Або просто використовується для того, щоб сказати компілятору щось на кшталт " Ну, я знаю, цей набір функцій не є POSIX, таким чином, не є портативним, але я б хотів його використовувати в будь-якому випадку ".
Якщо так, то чому б не дати людям різні заголовки, замість того, щоб визначити якийсь незрозумілий макрос, щоб отримати одну чи іншу функцію?
Щось також клопоче мене: як компілятор знає, яку реалізацію функції пов’язати з виконуваним файлом? Це він також використовує #define
?
У когось є якісь покажчики, щоб дати мені?
_GNU_SOURCE
- для того, щоб отриматиstrfry
іmemfrob
.