Na przykład używam funkcji printf
w C++ dla 8-bitowego procesora (AVR). Kod jest następujący bezpieczne:Jakie domyślne promocje typów znajdują się na liście argumentów variadic?
uint8_t a = 5;
printf("%d", a);
Tutaj %d
spodziewa int
(16-bit w moim przypadku, i co najmniej 16-bit w każdym razie), ale przechodzą 8-bitową liczbę całkowitą.
Czy standardy C/C++ gwarantują, że każdy typ o wartości mniejszej niż int
będzie promowany na int
?
To samo pytanie dla float a
i %f
, które oczekuje double
i innych podobnych typów.
Tak, kod jest bezpieczny z tego powodu, dla którego zgadłeś. – Deduplicator
Najlepiej pobierz najnowszy standard droidów i czytaj sam. Domyślne promocje: liczby całkowite w rankingu < int >> int, float >> double, to było to. – Deduplicator
@Deduplicator: Interesują mnie tylko promocje w funkcjach variadic. 'printf ("% d ", a)' to nie to samo, co 'print_int (a)' (gdzie 'print_int' oczekuje argumentu' int'), ponieważ kompilator nie wie ** co ** oczekuje funkcja wariancji w '...'. Patrzę na wersję roboczą, ale nie mogę znaleźć odpowiedzi na moje pytanie. –