Swifta stanu techniki kompilator nie zmieniło się wiele od czasów pierwszego kompilatora C został opracowany. Kompilatory stały się o wiele mądrzejsze w samodzielnym samodzielnym określaniu rzeczy, w tym zamierzonym typom wyrażeń, bez pomocy programistów.
Wykreślanie liczb literowych ciągu znaków jest jednym z takich przykładów. Teoretycznie struktura dzisiejszego C pozwala wnioskować o typie literału w wielu kontekstach. Na przykład, w kodzie poniżej kompilator ma wystarczających informacji, aby traktować ciągi pojedynczych znaków, jak gdyby były literały znakowe:
void foo(char c);
char s[] = "xyz";
// None of the below would compile
char a = "a";
foo("b");
if (s[1] == "c") {
...
}
powrotem w czasie, jednak łatwiej było poprosić programistę poinformować kompilator że "a"
, "b"
i "c"
są w rzeczywistości 'a'
, 'b'
i . Co więcej, ponieważ prototypy funkcji nie zostały wprowadzone, dopóki ANSI C, foo("b")
wnioskowanie nie było nawet możliwe w oryginalnej wersji językowej K & R.
Pomoc programisty nie jest już wymagana, gdy język ma system typu inferencyjnego, więc projektanci Swiftu zdecydowali się zunifikować składnię znaków i stałych znaków.
Dlaczego druga linia byłaby niepoprawna? Nie jest. –
Przepraszam edytowane @MorganWilde to był błąd – AbhimanyuAryan
@ Jean-PhilippePellet przepraszam przez pomyłkę napisałem to. Sprawdź teraz, edytowałem pytanie. – AbhimanyuAryan