Printf i jego deklaracja

0

Dlaczego printf w bibliotece stdio ma zwracać int? Może ktoś mi wytłumaczyć to dziwo?

 int printf (const char *__format, ...)
{
  register int __retval;
  __builtin_va_list __local_argv; __builtin_va_start( __local_argv, __format );
  __retval = __mingw_vprintf( __format, __local_argv );
  __builtin_va_end( __local_argv );
  return __retval;
}
1

A co ma niby innego zwracac? Dzien tygodnia?

1

Bo tak zostało to na początku zaimplementowane, a później nikt nie odważyłby się tego zmienić. Poza tym, to nie jest zły pomysł. Ta sama wartość jest zwracana dla fprintf i sprintf (oraz prawie ta sama dla snprintf), dzięki czemu łatwo można sprawdzić czy wywołanie się udało oraz ile znaków wpisano do bufora (np. żeby wiedzieć od którego miejsca dalej zapisywać).

0

Int zawsze mi się z liczbami kojarzyło, a nie ze stringiem, czy char

1

A "ilość znaków" nie jest liczbą?

0

@Rev ok ilość znaków, a skąd wie jakie one? ASCII?

0

Ilość znaków to metadane, nie dane. Nie musi wiedzieć jakie.

0

@kq to jeszcze mi powiedz, skoro printf nie musi wiedzieć, to która funkcja wie?

0

Nie rozumiem pytania. Funkcje z rodziny printf zwracają liczbę zapisanych znaków (lub liczbę znaków, które by zapisano, gdyby wystartczyło bufora), lub liczbę ujemną w przypadku błędu. Jaka funkcja i po co ma wiedzieć co to za znaki?

0

@kq by wypisać np. na ekran?
Kurde, strasznie dużo nie wiem...

0

printf wypisuje znaki "na ekran" (a raczej do wyjścia standardowego). Zwraca liczbę wypisanych znaków lub ujemną wartość jeśli się nie udało. Wartość zwracana nie jest bezpośrednio powiązana z wypisanymi danymi - tylko je opisuje.

0

@kq i mam rozumieć, że to samo jest przy wszystkich pochodnych printf?

2

Zamiast rozumieć możesz po prostu poczytać dokumentację: http://en.cppreference.com/w/c/io/fprintf

0

@kq mój bohater :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1