Considerare questi due stringhe:C/C++: ambiguità di formato " xnnn" nelle stringhe letterali
wchar_t* x = L"xy\x588xla";
wchar_t* y = L"xy\x588bla";
dopo aver letto questo che ci si aspetta che entrambe le stringhe letterali sono gli stessi, tranne un personaggio - un 'x'
invece di un 'b'
.
Si scopre che questo non è il caso. La prima stringa compila a:
y = {'x', 'y', 0x588, 'x', 'l', 'a' }
e il secondo è in realtà:
x = {'x', 'y', 0x588b, 'l', 'a' }
Non sono nemmeno la stessa lunghezza!
Sì, lo 'b'
viene divorato dal carattere di rappresentazione esadecimale ('\xNNN'
).
Per lo meno, questo potrebbe causare confusione e bug sottili per nelle stringhe scritte a mano (si potrebbe sostenere che le stringhe Unicode non appartengono nel corpo del codice)
Ma il problema più grave, e la quello che sto affrontando è nel codice generato automaticamente. Non sembra esserci alcun modo per esprimere questo: {'x', 'y', 0x588, 'b', 'l', 'a' }
come stringa letterale senza ricorrere a scrivere l'intera stringa in una rappresentazione esadecimale, che è dispendiosa e illeggibile.
Qualche idea di un modo per aggirare questo?
Qual è il senso nel linguaggio che si comporta in questo modo?
Ahi, appena eseguito in questo in C. Per fortuna il compilatore VS2013 mi ha avvertito che il mio valore di carattere esadecimale era al di fuori del 'char' gamma. – Spike0xff