Co jest niewłaściwego w poniższych instrukcjach języka C wykorzystywanych w Arduino i jak to naprawić?

Co jest niewłaściwego w poniższych instrukcjach języka C wykorzystywanych w Arduino i jak to naprawić?
int val;
double x = 1000.0;
val = x;
Odpowiedź:
Ostatnia instrukcja jest instrukcją przypisania, więc bierzesz rvlaue wartości x i kopiujesz ją do rvalue wartości val.
Korzystając z analogii wiadra (bucket), wlewasz zawartość 4-bajtowego wiadra do 2-bajtowego wiadra, więc istnieje ryzyko utraty danych.
Naprawiasz to za pomocą operatora cast (przekształcanie jednego typu danych w inny), jak w następującej instrukcji:
val = (int) x;
Operator cast powoduje zabranie 2 bajtów „nieużywanej” wody i po prostu przypisywanie znaczących danych (tj. 1000) do val.
Niestety, od Ciebie zależy znajomość maksymalnej wartości, jaką int może utrzymać, zanim proces „zgarniania” zacznie wylewać dzieci z kąpielą.
Pamiętaj, że kompilator Arduino pozwala na ciche rzuty (casts) i prawie nigdy nie są to dobry pomysł.
Z reguły: zawsze używaj rzutowania, gdy używasz operatora przypisania z różnymi typami danych.
Autor: Christophe Basso

Komentarze z Facebooka

Komentarze obecnie - OFF.