In seguito a una discussione di alcuni giorni fa sono andato a documentarmi su sprintf, ma mi sembra che in alcuni casi nascano problemi se voglio usare una variabile a 8 bit... Che cosa succede se per dei valori numerici uso una variabile int8_t pippo?
Ci sono differenze se nella variabile pippo scrivo 'a' oppure 49?
quando scrivi 'a' è un char
quando scrivi 49 è un int
quindi il type viene eventualmente promosso a seconda di ciò che la destinazione si aspetta.
se scrivi char x = 'a';
quindi mantieni il type di carattere, non è necessaria alcuna modifica.
se scrivi char x = 49;
l'int viene troncato per mantenere solo il byte meno significativo (LSB) in modo che rientri in 1 byte. Dal momento che 49 si adatta all'LSB, funzionerà anche.
se scrivi function(49), allora 49 inizia come un int e il compilatore lo promuove a ciò che la function() si aspetta (firma della funzione)
se chiami function(x) allora x è un carattere che verrà promosso alla firma del parametro della function()
Bella domanda
In effetti con arduino non lo so
In C (non C++) dubito ci siano differenze
Una costante carattere come 'a' è di tipo intero, non char, si tratta di un "peccato originale" di Dennis e Brian
E quindi in C per usare 'a' come carattere serve sempre passare per un casting o per una variabile char (casting implicito) o per una specifica di formato
In C++ hanno corretto questa anomalia
E quindi dovrebbe esserci differenza
1) Ordinary character literal, e.g. 'a' or '\n' or '\13'. Such literal has type char and the value equal to the representation of c-char in the execution character set (until C++23)the corresponding code point from ordinary literal encoding (since C++23).
l'IDE Arduino utilizza un compilatore C++, quindi 'a' è un char
In questo periodo non sto scrivendo codice, però stavo considerando l'uso futuro di sprintf, eventualmente anche per compattare un po' il mio "Geigerino" (Il contatore Geiger) che, tra una funzione e l'altra (compreso l'Easter Egg ) ha riempito la memoria e ogni volta che vado a fare una modifica aggiungendo qualcosa devo inventarmi qualcosa per rubare una manciata di byte qua e là!
P.s.: l'Easter Egg è una musichetta con il testo che appare: "Radio activity is in the air for you and me".