Opublikowano: 12-12-2016



Często nawet nad prostym zadaniem programistycznym można spędzić chwilę czasu. W tym wpisie przedstawię jeden z nich - stworzenie napisu zawierającego liczbę.

Do C++11 wprowadzono typy o określonym rozmiarze. Znajdują się one w nagłówku cstdint. Pełną listę typów można znaleźć w dokumentacji [1]. Skupmy się na typie zajmującym 8 bitów - uint8_t. Jest on dość mały więc idealnie nadaje się do przechowywania niewielkich liczb.

Zadaniem było stworzenie napisu zawierającego liczbę, na przykład "napis-1". W tym celu wykorzystano stringstream [2], co zaowocowało napisaniem poniższego programu:

Wyjście z programu po uruchomieniu:

Wynik: napis-

Tu pojawia się problem, gdzie podziała się liczba? uint8_t jest często aliasem na typ char (np. [3]). Do stringstream nie trafia zatem liczba, ale znak o kodzie 1. Należy zrzutować zmienną na typ liczbowy, aby uzyskać oczekiwany efekt.

Wynik działania:

Wynik: napis-1

Czasami nazwa typu zmiennej potrafi być myląca, a nad prostym błędem można spędzić chwilę czasu. Także twórcy języka nie ułatwiają zadania określając jedynie rozmiar tych typów, pozostawiają ich implementację twórcom kompilatorów. Przed takimi błędami programistę może uchronić metoda pracy zgodna z zasadami Test-Driven Development (TDD).



Comments powered by Disqus