Bagikan melalui


Fase terjemahan

Program C dan C++ terdiri dari satu atau beberapa file sumber, yang masing-masing berisi beberapa teks program. File sumber, bersama dengan file yang disertakan, file yang disertakan menggunakan #include direktif pra-prosesor, tetapi tidak termasuk bagian kode yang dihapus oleh arahan kompilasi bersyariah seperti #if, disebut unit terjemahan.

File sumber dapat diterjemahkan pada waktu yang berbeda. Bahkan, biasanya hanya menerjemahkan file yang sudah kedaluarsa. Unit terjemahan yang diterjemahkan dapat diproses ke dalam file objek terpisah atau pustaka kode objek. Unit terjemahan terpisah dan diterjemahkan ini kemudian ditautkan untuk membentuk program yang dapat dieksekusi atau pustaka tautan dinamis (DLL). Untuk informasi selengkapnya tentang file yang dapat digunakan sebagai input ke linker, lihat File input LINK.

Unit terjemahan dapat berkomunikasi menggunakan:

  • Panggilan ke fungsi yang memiliki tautan eksternal.

  • Panggilan ke fungsi anggota kelas yang memiliki tautan eksternal.

  • Modifikasi langsung objek yang memiliki tautan eksternal.

  • Modifikasi langsung file.

  • Komunikasi antarproseksi (hanya untuk aplikasi berbasis Microsoft Windows).

Daftar berikut menjelaskan fase di mana pengkompilasi menerjemahkan file:

Pemetaan karakter
Karakter dalam file sumber dipetakan ke representasi sumber internal. Urutan trigraf dikonversi menjadi representasi internal karakter tunggal dalam fase ini.

Splicing garis
Semua baris yang berakhiran garis miring terbelakang (\) segera diikuti oleh karakter baris baru digabungkan dengan baris berikutnya dalam file sumber, membentuk baris logis dari baris fisik. Kecuali kosong, file sumber harus berakhir dengan karakter baris baru yang tidak didahului oleh garis miring terbalik.

Tokenisasi
File sumber dipecah menjadi token pra-pemrosesan dan karakter spasi putih. Komentar dalam file sumber diganti dengan masing-masing satu karakter spasi. Karakter baris baru dipertahankan.

Preprocessing
Arahan praproses dijalankan dan makro diperluas ke dalam file sumber. Pernyataan ini #include memanggil terjemahan yang dimulai dengan tiga langkah terjemahan sebelumnya pada teks yang disertakan.

Pemetaan set karakter
Semua anggota set karakter sumber dan urutan escape dikonversi ke setara mereka dalam set karakter eksekusi. Untuk Microsoft C dan C++, set karakter sumber dan eksekusi adalah ASCII.

Perangkaian string
Semua string yang berdekatan dan literal string lebar digabungkan. Misalnya, "String " "concatenation" menjadi "String concatenation".

Terjemahan
Semua token dianalisis secara sintetis dan semantik; token ini dikonversi menjadi kode objek.

Linkage
Semua referensi eksternal diselesaikan untuk membuat program yang dapat dieksekusi atau pustaka tautan dinamis.

Kompilator mengeluarkan peringatan atau kesalahan selama fase terjemahan di mana ia mengalami kesalahan sintaks.

Linker menyelesaikan semua referensi eksternal dan membuat program yang dapat dieksekusi atau DLL dengan menggabungkan satu atau beberapa unit terjemahan yang diproses secara terpisah bersama dengan pustaka standar.

Baca juga

Preprocessor