Aktywne Wpisy

Sebalke +28
Chyba coś przegapiłem ale od kiedy #instagram zmienił się w coś takiego? XDDDD kiedyś miałem głównie treści związane z motoryzacją, czy muszę zmienić jakieś opcje w insta?
źródło: 1000022422
Pobierz
Mr_Przyjemny +643
źródło: temp_file5543653650226727539
Pobierz




Otóż ten program:
#include#includeint main() {double d = sqrt(56);printf("%f\n", d);return 0;}wbrew moim oczekiwaniom nie wymaga już ręcznego dołączania biblioteki matematycznej. Kompiluje się bez błędów i bez ostrzeżeń przy samym
gcc main.c -Wall. Powiem więcej: nawet po usunięciu obu dyrektyw #include kompiluje się i wykonuje poprawnie, wypisując tylko ostrzeżenia:
main.c: In function ‘main’:
main.c:5:13: warning: incompatible implicit declaration of built-in function ‘sqrt’ [enabled by default]
main.c:6:2: warning: incompatible implicit declaration of built-in function ‘printf’ [enabled by default]
Od kiedy tak jest? Kompilator gcc tak się teraz zachowuje, czy sobie coś ustawiłem i nie pamiętam? Mam wersję 4.6.3, system Ubuntu 12.04LTS.
#programowanie #jezykc #linux
Komentarz usunięty przez autora
@Onoki: Przeczytaj uwaznie ten komunikat to bedziesz wiedzial :P
std=c99lub
std=c11domyślnie. Poza tym, kompilator moƶe za wyraƶenie zawierające stałą wstawić stałą: przykład
@KrzaQ2: Strzał w dychę! :D
Otóż okazało się, że jest to optymalizacja. Po zamianie 56 na zmienną pobieraną wcześniej za pomocą scanf linker zgłasza "undefined reference to `sqrt'", tak jak to było zawsze. :) Czyli po etapie kompilacji sqrt(56) zostało zamienione na stałą, więc biblioteka matematyczna w ogóle nie musi być dołączana do programu. Nawet nie wiedziałem, że gcc robi
gcc.godbolt.org
genialny do dyskusji o optymalizacji, zwłaszcza że od razu ma listę wielu kompilatorów