Dzisiaj musiałem skorzystać z basename()
funkcji, a man 3 basename
( tutaj ) dał mi dziwną wiadomość:
Uwagi
Istnieją dwie różne wersje basename () - wersja POSIX opisana powyżej oraz wersja GNU , którą otrzymuje się po
#define _GNU_SOURCE
#include <string.h>
Zastanawiam się, co to #define _GNU_SOURCE
oznacza: czy jest to skażenie kodu, który piszę, na licencji GNU? A może po prostu mówi kompilatorowi coś w stylu: „ Wiem, że ten zestaw funkcji nie jest POSIX-owy, więc nie jest przenośny, ale i tak chciałbym go użyć ”.
Jeśli tak, dlaczego nie dać ludziom różnych nagłówków, zamiast definiować jakieś niejasne makro, aby uzyskać jedną implementację funkcji lub inną?
Coś też mnie niepokoi: skąd kompilator wie, którą implementację funkcji połączyć z plikiem wykonywalnym? Czy to też używa #define
?
Czy ktoś ma mi jakieś wskazówki?
_GNU_SOURCE
jest zdobyciestrfry
imemfrob
.