Najlepsza odpowiedź
Sprawdzanie typów jest wykonywane przez narzędzie do sprawdzania typów, które sprawdza, czy typ konstrukcji (stała, zmienna, tablica, lista, obiekt) odpowiada temu, czego oczekuje się w kontekście użycia. Zapewnia to wykrywanie i zgłaszanie określonych typów błędów programowania. Na przykład rozważmy następujące wyrażenie zawierające operator modulo 8\% 3.5, to wyrażenie spowoduje błąd, ponieważ operator modulo oczekuje dwóch liczb całkowitych. Narzędzie do sprawdzania typów musi wiedzieć – Konstrukcje składniowe w języku (np. Operatory) – Podstawowe typy języka (int, real) – Reguły przypisywania typów do konstrukcji Np. „Jeśli oba operandy + są int, wynik jest int”
Istnieją dwa typy sprawdzania typów Statyczne i Dynamiczne
Statyczne sprawdzanie typu: Sprawdzanie typów przeprowadzane w czasie kompilacji. Podczas używania tych języków musisz zadeklarować typ zmiennych przed ich użyciem (kompilator musi wiedzieć, do jakiego typu danych należy zmienna). Na przykład rozważ instrukcję w języku c ++ int a = 10; tutaj kompilator musi znać typ danych zmiennej „a” przed jej użyciem. Np. C, C ++, JAVA, C # to niektóre języki z typami statycznymi
Dynamiczne Sprawdzanie typów: Sprawdzanie typów wykonywane w czasie wykonywania. Używając tych języków, nie musisz określać ani deklarować typu zmiennej, zamiast tego kompilator sam sprawdza, jaki typ jest zmienna, gdy po raz pierwszy przypisujesz jej wartość. Teraz rozważ kilka instrukcji w pythonie: str = „Python” str2 = 10 Tutaj nie musisz deklarować typu danych. Kompilator sam będzie wiedział, do jakiego typu należy zmienna, kiedy po raz pierwszy przypiszesz jej wartość (str1 ma typ danych „String”, a str2 jest typu „int”). Np. VBScript, Python to Języki wpisywane dynamicznie.
Odpowiedź
Sprawdzanie typu to testowanie, czy operacja zmienne używają zgodnego typu. Różne języki mają różne poziomy zmiennej kompatybilności. Język silnie sprawdzany pod względem typów ma ścisłe reguły dotyczące typów zmiennych w wyrażeniu. Po drugiej stronie medalu są języki, które pozwalają na mieszanie różnych typów. Te języki pozwolą w pewnym stopniu skompensować typy mieszane, używając pewnych reguł konwersji zmiennych.
Na przykład w niektórych językach typu ścisłego można dodać tylko dwie liczby całkowite lub dwie liczby zmiennoprzecinkowe, ale zgłosić błąd, jeśli spróbujesz aby dodać liczbę całkowitą do liczby zmiennoprzecinkowej. W innych językach, jeśli dodasz liczbę całkowitą do zmiennej zmiennoprzecinkowej, może ona niejawnie przekonwertować ją na liczbę zmiennoprzecinkową, a następnie wykonać dodawanie.
C ++ jest gdzieś pośrodku. W C ++ pozwala na pewne niejawne konwersje. C i C ++ ma kilka luk. Po pierwsze, nazywa się odlewaniem. Rzutowanie to po prostu mówienie kompilatorowi, że zmienna jest „tego typu” w przeciwieństwie do zadeklarowanej wartości. Na przykład w powyższym przykładzie, jeśli chcemy, aby float był traktowany jako int, możemy rzutować float na int.
Przykład: int x, a; float y, b;
b = x + y;
a = x + (int) y; lub możesz chcieć a = (int) (x + y);
Ponieważ wskaźniki są generalnie wpisywane, możemy użyć rzutowania, aby jedna struktura wyglądała jak inna struktura.
typedef struct {/ * Members * /} A;
typedef struct {/ * Members * /} B;
A ax;
B * bp;
bp = &ax; // Błąd: różne typy wskaźników!
bp = (B *) &ax; // efektywnie definiuje nakładkę A z B jak sumę
W przypadku wskaźników istnieje również void *, który jest wskaźnikiem wieloznacznym. Pozwala na użycie wszędzie tam, gdzie dozwolony jest dowolny typ wskaźnika, takie funkcje typu mem, np. memcpy.