Printf i jego deklaracja

Printf i jego deklaracja
NJ
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 7 lat
  • Postów:39
0

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

Kopiuj
 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;
}
n0name_l
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 4 lata
  • Postów:2412
1

A co ma niby innego zwracac? Dzien tygodnia?

kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:około 6 godzin
  • Lokalizacja:Szczecin
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ć).


NJ
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 7 lat
  • Postów:39
0

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

RE
Moderator
  • Rejestracja:około 18 lat
  • Ostatnio:około rok
1

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

NJ
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 7 lat
  • Postów:39
0

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

kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:około 6 godzin
  • Lokalizacja:Szczecin
0

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


NJ
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 7 lat
  • Postów:39
0

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

kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:około 6 godzin
  • Lokalizacja:Szczecin
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?


NJ
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 7 lat
  • Postów:39
0

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

edytowany 1x, ostatnio: Nju
kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:około 6 godzin
  • Lokalizacja:Szczecin
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.


NJ
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 7 lat
  • Postów:39
0

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

kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:około 6 godzin
  • Lokalizacja:Szczecin
2

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


Shalom
Albo zerknąć gdzieś w źrodła ;)
NJ
@Shalom kek?
kq
Myślę, że źródła nie muszą być tutaj najlepszym rozwiązaniem. 1) nie znając faktycznych gwarancji (lub ich braku) może sobie wyrobić błędne wyobrażenie na temat działania funkcji. (np. jakaś implementacja może zawsze zwracać -1 w przypadku błędu, co jest zgodne z wymaganiami ale może prowadzić do błędnego założenia, że -1 ma być zwracane w przypadku błędu). 2) implementacje są z reguły straszliwie nieczytelne, szczególnie dla nowicjuszy (aż roi się od ohydnych nazw, kilku poziomów zagłębienia wywołań dodatkowo zależnych od różnych ifdefów).
NJ
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 7 lat
  • Postów:39
0

@kq mój bohater :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.