Lo stato dell'arte della tecnologia compilatore è cambiato molto da quando il tempo è stato sviluppato il primo compilatore C. I compilatori sono diventati molto più intelligenti nel capire le cose da soli, incluso il tipo di espressioni previste, senza l'aiuto dei programmatori.
La figura char
rispetto a stringhe letterali è uno di questi esempi. Teoricamente, la struttura della C di oggi permette di dedurre il tipo di un letterale in molti contesti. Ad esempio, nel seguente codice il compilatore dispone di informazioni sufficienti per trattare le stringhe di un solo carattere, come se fossero letterali di caratteri:
void foo(char c);
char s[] = "xyz";
// None of the below would compile
char a = "a";
foo("b");
if (s[1] == "c") {
...
}
Ritorno al momento, tuttavia, era più facile chiedere al programmatore di dire al compilatore che "a"
, "b"
e "c"
sono in realtà 'a'
, 'b'
e 'c'
. Inoltre, poiché i prototipi di funzione non sono stati introdotti fino all'ANSI C, l'inferenza foo("b")
non era nemmeno possibile nella versione originale K & R della lingua.
L'aiuto del programmatore non è più necessario quando la lingua ha un sistema di inferenza di tipo, quindi i progettisti Swift hanno deciso di unificare la sintassi per le costanti stringa e carattere.
Perché la seconda riga non è corretta? Non lo è. –
sorry edited @MorganWilde era un errore – AbhimanyuAryan
@ Jean-PhilippePellet mi dispiace per errore che l'ho scritto. Si prega di verificare ora ho modificato la domanda. – AbhimanyuAryan