kategoria: ANSI C
[#1] [GCC] printf wyświetla %f zamiast wartości
Cześć,
jak w tytule, kompilator GCC od Bebbo,
prosty test robiłem z obliczaniem czasu, chciałem wyświetlić wynik jako float.

Z poniższego kodu:
#include <stdio.h>

int main(int argc, char ** argv)
{
    printf("%f\n", 10.0f);

  return 0;
}


otrzymuje:
%f

czyli %f zamiast wartości taj kaby nie znał kodu %f

skompilowane z flagami:
m68k-amigaos-gcc hello.c -o test1 -Os -noixemul


macie jakiś pomysł? integery działają %d - uruchmiłem na winuae
dzięki
[wyróżniony] [#2] Re: [GCC] printf wyświetla %f zamiast wartości

@mateusz_s, post #1

dodaj flagę -lm
[#3] Re: [GCC] printf wyświetla %f zamiast wartości

@san_u, post #2

Dzięki, śmignęło :)
a co dokładnie robi ta flaga -lm ?
zauważyłem, ze plik zwiększył się o 5kb..

w sumie to taka podstawa, można gdzieś przeczytać
o tych flagach do Amigi, które warto albo trzeba używać?
[#4] Re: [GCC] printf wyświetla %f zamiast wartości

@mateusz_s, post #3

-lNAME mowi linkerowi, ze ma znalezc i dodac do listy linkowanych obiektow archiwum o nazwie NAME (linker bedzie szukal dodajac przedrostek lib i odpowiednie rozszerzenie: libNAME.a). W tym wypadku m -> math.
Uzywajac -Lpath mozesz powiedziec linkerowi gdzie ma szukac bibliotek.

te opcje gcc przekazuje do linkera (ld), wiecej tu:
https://gcc.gnu.org/onlinedocs/gcc/Link-Options.html
i tu:
https://ftp.gnu.org/old-gnu/Manuals/ld-2.9.1/html_node/ld_3.html
[#5] Re: [GCC] printf wyświetla %f zamiast wartości

@lef, post #4

Zastanawia mnie, dlaczego kompilator nie generuje żadnego ostrzeżenia, czy też błędu o niemożliwości znalezienia symbolu, gdy nie ma -lm.
[#6] Re: [GCC] printf wyświetla %f zamiast wartości

@san_u, post #5

Poniewaz zadnego symbolu mu nie brakuje. bez -lm znajduje symbol "printf" w stdlib. mozesz to sobie sprawdzic linkujac z opcja -nostdlib, bedzie ci brakowalo wlasnie printf. Jesli uzyjesz -nostdlib -lm program sie nie zlinkuje, ale zobaczysz takie cos:

libnix/lib/libm020/libm881/libm.a(printf.o): in function `printf':

Czyli symbol printf zostal znaleziony, ale nie w stdlib tylko w libm. a printf z libm.a uzywa wewnetrznie vfprintf, ktora to funkcja rozumie %f.

linker zawsze bierze pierwszy symbol, ktory znajdzie. bez lm wyglada to jakos tak:
-( -lnix20 -lnixmain -lnix -lstubs -lamiga -lgcc -)
z -lm tak:
-lm -( -lnix20 -lnixmain -lnix -lstubs -lamiga -lgcc
[#7] Re: [GCC] printf wyświetla %f zamiast wartości

@lef, post #6

Dzięki za rozjaśnienie, nie przypuszczałbym, że niektórych funkcji może być kilka wersji.
Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem