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_SOURCEoznacza: 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_SOURCEjest zdobyciestrfryimemfrob.