Udostępnij za pośrednictwem


Fazy tłumaczenia

Programy C i C++ składają się z jednego lub więcej plików źródłowych, z których każdy zawiera część tekstu programu.Plik źródłowy, wraz z dołączonymi plikami (plikami dołączonymi za pomocą dyrektywy preprocesora #include), ale bez sekcji kodu usuniętych przez dyrektywy kompilacji warunkowej takie jak #if, nosi nazwę "jednostki tłumaczenia".

Pliki źródłowe mogą być tłumaczone w różnym czasie — w rzeczywistości bardzo często tłumaczone są tylko nieaktualne pliki.Przetłumaczone jednostki tłumaczenia mogą być przetwarzane do oddzielnych plików obiektu lub bibliotek kodu obiektu.Te oddzielne, przetłumaczone jednostki tłumaczenia są następnie łączone, aby sformułować program wykonywalny lub bibliotekę dynamicznych połączeń (DLL). Aby uzyskać więcej informacji dotyczących plików, które mogą być używane jako dane wejściowe do konsolidatora, zobacz Pliki wyjściowe LINK.

Jednostki tłumaczenia mogą komunikować się za pomocą:

  • Wywołań funkcji, które mają powiązania zewnętrzne.

  • Wywołań funkcji członkowskich klasy, które mają powiązania zewnętrzne.

  • Bezpośrednich modyfikacji obiektów, które mają powiązania zewnętrzne.

  • Bezpośrednich modyfikacji plików.

  • Komunikacji międzyprocesowej (tylko dla aplikacji opartych na Microsoft Windows).

Na poniższej liście opisano fazy, w których kompilator tłumaczy pliki:

  • Mapowanie znaków
    Znaki w pliku źródłowym są mapowane do wewnętrznej reprezentacji źródła.Sekwencje trzech znaków są konwertowane na wewnętrzną reprezentację pojedynczych znaków w tej fazie.

  • Łączenie wierszy
    Wszystkie wiersze kończące się znakiem odwrotnej kreski ukośnej (\), po których bezpośrednio następuje znak nowego wiersza są przyłączane do następnego wiersza w pliku źródłowym, tworząc logiczne wiersze z wierszy fizycznych.O ile nie jest on pusty, plik źródłowy musi kończyć się znakiem nowego wiersza, który nie jest poprzedzony znakiem odwrotnej kreski ukośnej.

  • Tokenizacja
    Plik źródłowy jest dzielony na tokeny wstępnego przetwarzania i znaki spacji.Każdy komentarz w pliku źródłowym jest zamieniany na jeden znak spacji.Znaki nowego wiersza są zachowywane.

  • Przetwarzanie wstępne
    Dyrektywy preprocesora są wykonywane, a makra są rozwijane do pliku źródłowego.Instrukcja #include wywołuje tłumaczenie począwszy od powyższych trzech kroków tłumaczenia na dowolnym dołączonym tekście.

  • Mapowanie zestawu znaków
    Wszystkie elementy członkowskie zestawu znaków źródła i sekwencje unikowe są konwertowane na ich odpowiedniki w zestawie znaków wykonywania.W Microsoft C i C++, zestawy znaków źródła i wykonania są w kodowaniu ASCII.

  • Łączenie ciągów
    Wszystkie sąsiadujące ciągi znaków i literały szerokiego ciągu są łączone.Na przykład, "String " "concatenation" staje się "String concatenation".

  • Tłumaczenie
    Wszystkie tokeny są analizowane składniowo i semantycznie; tokeny te są przekształcane na kod obiektu.

  • Połączenie
    Wszystkie odwołania zewnętrzne są rozwiązywane, aby utworzyć bibliotekę dynamicznych połączeń lub program wykonywalny.

Kompilator generuje ostrzeżenia lub błędy podczas faz tłumaczenia, w których napotka błędy składniowe.

Konsolidator usuwa wszystkie odwołania zewnętrzne i tworzy plik wykonywalny lub bibliotekę DLL przez połączenie jednej lub więcej jednostek tłumaczenia z bibliotekami standardowymi.

Zobacz też

Informacje

Preprocesor