2013-08-07 9 views
5

appena scoperto che tutti i seguenti lavori:miscelazione largo e stretto letterali stringa in C

printf("%ls\n", "123" L"456"); 
printf("%ls\n", L"123" "456"); 
printf("%ls\n", L"123" L"456"); 

L'uscita è

123456 
123456 
123456 

Perché non posso liberamente combinare largo e stretto stringhe letterali come risultato di ottenere una stringa letterale? È un comportamento documentato?

risposta

8

È un comportamento documentato?

Sì, questo comportamento è supportato dallo standard, dalla sezione 6.4.5stringhe letterali paragrph del C99 draft standard dice (sottolineatura mia):

In fase di traduzione 6, la Le sequenze di caratteri multibyte specificate da una sequenza di caratteri adiacenti e token letterali a stringa ampia sono concatenate in una singola sequenza di caratteri multibyte. Se uno dei token è un token letterale stringa ampio, la sequenza di caratteri multibyte risultante viene trattata come una stringa letterale di larghezza; in caso contrario, viene trattato come una stringa di caratteri letterale.

5

6.4.5 stringa letterali

In fase di traduzione 6, le sequenze di caratteri multibyte specificate dal qualsiasi sequenza di caratteri adiacenti e stringa ampia token letterali sono concatenati in una sequenza singolo carattere multibyte . Se uno qualsiasi dei token è un token letterale stringa ampio, la sequenza di caratteri risultante multibyte viene considerata come un valore letterale di stringa ampio; altrimenti, viene considerato come una stringa di caratteri letterale.