Rumah >pembangunan bahagian belakang >Tutorial C#.Net >Apakah fail yang dihasilkan selepas menyusun fail sumber dalam bahasa C?

Apakah fail yang dihasilkan selepas menyusun fail sumber dalam bahasa C?

青灯夜游
青灯夜游asal
2022-11-23 19:44:5812625semak imbas

Selepas menyusun dalam bahasa C, fail binari (fail objek) ".OBJ" dijana. Dalam bahasa C, selepas program sumber (.c file) disusun oleh pengkompil, fail binari (dipanggil fail objek) dengan akhiran ".OBJ" akan dihasilkan akhirnya, ia dipanggil "pautan" Perisian menghubungkan fail ".OBJ" ini dengan pelbagai fungsi perpustakaan yang disediakan oleh bahasa C untuk menjana fail boleh laku dengan akhiran ".EXE".

Apakah fail yang dihasilkan selepas menyusun fail sumber dalam bahasa C?

Persekitaran pengendalian tutorial ini: sistem Windows 7, versi c99, komputer Dell G3.

Kompilasi fail sumber bahasa C

Nama akhiran fail sumber bahasa C ialah ".c", dan nama akhiran fail yang disusun ialah ". obj". Selepas sambungan Nama akhiran fail boleh laku ialah ".exe".

Langkah-langkah untuk mencipta atur cara dalam bahasa C:

  • Menyunting: Ia adalah untuk mencipta dan mengubah suai kod sumber program C - atur cara yang kita tulis dipanggil sumber kod.

  • Kompilasi: Ia adalah untuk menukar kod sumber kepada bahasa mesin. Output pengkompil menjadi kod objek, dan fail yang menyimpannya dipanggil fail objek. Sambungan ialah .o atau .obj. (Bahagian kompilasi ini merujuk kepada bahasa himpunan penghimpun penghimpun atau pengkompil yang menyusun bahasa peringkat tinggi)

  • Pemautan: Pemaut menggabungkan kod sumber daripada pelbagai modul yang dihasilkan oleh pengkompil, dan kemudian dari Tambah modul kod yang diperlukan ke perpustakaan program yang disediakan oleh bahasa C dan bentukkannya menjadi fail boleh laku. Sambungan ialah .exe di bawah Windows dan tidak mempunyai sambungan di bawah Unix.

  • Laksanakan: Jalankan program.

Selepas program sumber bahasa C disusun oleh pengkompil bahasa C, fail binari (dipanggil fail objek) dengan akhiran ".OBJ" dijana, dan akhirnya binari fail yang dipanggil "fail sambungan" dijana perisian "Program" (Pautan) menghubungkan fail ".OBJ" ini dengan pelbagai fungsi perpustakaan yang disediakan oleh bahasa C untuk menjana fail boleh laku dengan akhiran ".EXE". Jelas sekali bahasa C tidak boleh dilaksanakan dengan segera.

Rajah proses adalah seperti berikut:

Apakah fail yang dihasilkan selepas menyusun fail sumber dalam bahasa C?

Seperti yang anda boleh lihat daripada rajah, keseluruhan proses penyusunan kod dibahagikan kepada dua proses: penyusunan dan pemautan . Kompilasi sepadan dengan angka Bahagian yang disertakan dengan pendakap kerinting, dan selebihnya adalah proses memaut.

Proses penyusunan

  • Proses penyusunan boleh dibahagikan kepada dua peringkat: Kompilasi dan akan menyusun .

Kompilasi: Kompilasi adalah untuk membaca program sumber (aliran aksara), menganalisisnya secara leksikal dan tatabahasa, dan menukar arahan bahasa peringkat tinggi kepada fungsi Bersamaan dengan kod pemasangan, proses penyusunan fail sumber terdiri daripada dua peringkat utama:

Peringkat pertama ialah peringkat prapemprosesan , yang dilakukan sebelum peringkat penyusunan formal. Fasa prapemprosesan akan mengubah suai kandungan fail sumber mengikut arahan prapemprosesan yang telah diletakkan di dalam fail. Sebagai contoh, arahan #include ialah arahan prapemprosesan yang menambahkan kandungan fail pengepala pada fail .cpp. Kaedah mengubah suai fail sumber sebelum penyusunan ini memberikan fleksibiliti yang hebat untuk menyesuaikan diri dengan kekangan persekitaran komputer dan sistem pengendalian yang berbeza. Kod yang diperlukan untuk satu persekitaran mungkin berbeza daripada kod yang diperlukan untuk persekitaran yang lain kerana perkakasan atau sistem pengendalian yang tersedia adalah berbeza. Dalam kebanyakan kes, anda boleh meletakkan kod untuk persekitaran berbeza dalam fail yang sama dan kemudian mengubah suai kod semasa fasa prapemprosesan untuk menyesuaikannya dengan persekitaran semasa.

Terutamanya berurusan dengan aspek berikut:

  • Arahan takrifan makro, seperti #define a b
    • Untuk arahan pseudo seperti ini, semua prakompilasi yang perlu dilakukan ialah menggantikan semua a dengan b dalam program, tetapi a sebagai pemalar rentetan tidak diganti. Terdapat juga #undef, yang akan membatalkan takrifan makro tertentu supaya kejadian rentetan pada masa hadapan tidak akan diganti lagi.
  • Arahan kompilasi bersyarat, seperti #ifdef, #ifndef, #else, #elif, #endif, dll.
    • Pengenalan arahan pseudo ini membolehkan pengaturcara memutuskan kod yang hendak diproses oleh pengkompil dengan mentakrifkan makro yang berbeza. Precompiler akan menapis kod yang tidak diperlukan berdasarkan fail yang berkaitan.
  • Fail pengepala mengandungi arahan, seperti #include 'FileName' atau #include dll. .
    • Dalam fail pengepala, arahan pseudo #define biasanya digunakan untuk mentakrifkan sebilangan besar makro (yang paling biasa ialah pemalar aksara), dan juga mengandungi pengisytiharan pelbagai simbol luaran. Tujuan utama menggunakan fail pengepala adalah untuk menyediakan definisi tertentu kepada pelbagai program sumber C yang berbeza. Kerana dalam program sumber C yang perlu menggunakan takrifan ini, anda hanya perlu menambah pernyataan #include, tanpa perlu mengulang takrifan ini dalam fail ini. Prapenyusun akan menambah semua definisi dalam fail pengepala kepada fail output yang dijananya untuk diproses oleh pengkompil. Fail pengepala yang disertakan dalam program sumber C boleh disediakan oleh sistem Fail pengepala ini biasanya diletakkan dalam direktori /usr/include. Gunakan kurungan sudut () untuk #memasukkannya dalam program. Selain itu, pembangun juga boleh mentakrifkan fail pengepala mereka sendiri Fail ini biasanya diletakkan dalam direktori yang sama dengan program sumber C Dalam kes ini, petikan berganda ('') harus digunakan dalam #include.
  • Simbol khas, prapenyusun boleh mengenali beberapa simbol khas
    • Contohnya, tanda LINE yang muncul dalam program sumber akan ditafsirkan sebagai nombor baris semasa (nombor perpuluhan), dan FILE akan ditafsirkan sebagai nama program sumber C yang sedang disusun. Precompiler akan menggantikan kejadian rentetan ini dalam program sumber dengan nilai yang sesuai.

Apa yang dilakukan oleh precompiler pada dasarnya adalah "menggantikan" atur cara sumber. Selepas penggantian ini, fail output tanpa definisi makro, tiada arahan kompilasi bersyarat dan tiada simbol khas dihasilkan. Maksud fail ini adalah sama dengan fail sumber yang belum diproses, tetapi kandungannya berbeza. Seterusnya, fail output ini diterjemahkan ke dalam arahan mesin sebagai output pengkompil.

Peringkat kedua penyusunan dan pengoptimuman Dalam fail output yang diperoleh selepas prapenyusun, hanya terdapat pemalar, seperti nombor, rentetan, takrifan pembolehubah dan Kata Kunci. dalam bahasa C, seperti main, if, else, for, while, {,}, ,-,*, dsb.

  • Apa yang pengkompil perlu lakukan ialah menggunakan analisis leksikal dan analisis sintaks untuk mengesahkan bahawa semua arahan mematuhi peraturan tatabahasa, dan kemudian menterjemahkannya ke dalam perwakilan kod perantaraan atau kod himpunan yang setara.
  • Pemprosesan pengoptimuman ialah teknologi yang agak sukar dalam sistem penyusunan. Isu yang terlibat bukan sahaja berkaitan dengan teknologi kompilasi itu sendiri, tetapi juga mempunyai banyak kaitan dengan persekitaran perkakasan mesin. Sebahagian daripada pengoptimuman ialah pengoptimuman kod perantaraan. Pengoptimuman ini adalah bebas daripada komputer tertentu. Satu lagi jenis pengoptimuman dilakukan terutamanya untuk penjanaan kod sasaran.
  • Untuk pengoptimuman terdahulu, kerja utama ialah memadamkan ungkapan awam, pengoptimuman gelung (pengeluaran kod, kelemahan kekuatan, menukar keadaan kawalan gelung, penggabungan kuantiti yang diketahui, dll.), penyebaran salinan dan pemadaman tugasan yang tidak berguna , dsb.
  • Jenis pengoptimuman yang terakhir berkait rapat dengan struktur perkakasan mesin Perkara yang paling penting untuk dipertimbangkan ialah cara menggunakan sepenuhnya nilai pembolehubah berkaitan yang disimpan dalam setiap daftar perkakasan mesin. untuk mengurangkan bilangan akses memori. Di samping itu, cara membuat beberapa pelarasan pada arahan mengikut ciri-ciri arahan pelaksanaan perkakasan mesin (seperti saluran paip, RISC, CISC, VLIW, dll.) untuk menjadikan kod sasaran lebih pendek dan kecekapan pelaksanaan lebih tinggi juga merupakan topik penyelidikan yang penting .

Perhimpunan: Perhimpunan sebenarnya merujuk kepada proses menterjemah kod bahasa himpunan ke dalam arahan mesin sasaran. Untuk setiap program sumber bahasa C yang diproses oleh sistem terjemahan, fail sasaran yang sepadan akhirnya akan diperoleh melalui pemprosesan ini. Apa yang disimpan dalam fail sasaran ialah kod bahasa mesin sasaran yang setara dengan program sumber. Fail objek terdiri daripada segmen. Biasanya terdapat sekurang-kurangnya dua bahagian dalam fail objek:

  • Bahagian kod: Bahagian ini terutamanya mengandungi arahan program. Segmen ini biasanya boleh dibaca dan boleh dilaksanakan, tetapi secara amnya tidak boleh ditulis.
  • Segmen data: terutamanya menyimpan pelbagai pembolehubah global atau data statik yang digunakan dalam atur cara. Secara amnya, segmen data boleh dibaca, boleh ditulis dan boleh dilaksanakan.

Terdapat tiga jenis utama fail sasaran dalam persekitaran UNIX:

  • Fail boleh pindah: Mengandungi kod dan data yang sesuai untuk dipautkan dengan fail objek lain untuk mencipta fail objek boleh laku atau dikongsi.
  • Fail objek kongsi: Fail ini menyimpan kod dan data yang sesuai untuk dipautkan dalam dua konteks. Yang pertama ialah pemaut boleh memprosesnya dengan fail lain yang boleh dipindah dan fail objek yang dikongsi untuk mencipta fail objek yang lain ialah pemaut dinamik boleh memprosesnya dengan fail boleh laku yang lain dan fail objek kongsi yang lain, mereka mencipta satu proses imej.
  • Fail boleh laku: Ia mengandungi fail yang boleh dilaksanakan oleh proses yang dicipta oleh sistem pengendalian. Apa yang dijana oleh pemasang sebenarnya adalah jenis fail objek yang pertama. Untuk dua yang terakhir, beberapa pemprosesan lain diperlukan untuk mendapatkannya. Ini adalah tugas penyambung.

Proses pemautan:

Fail objek yang dijana oleh pemasang tidak boleh dilaksanakan serta-merta, dan mungkin terdapat di sana banyak isu yang belum selesai.

  • Contohnya, Fungsi dalam fail sumber mungkin merujuk kepada simbol (seperti pembolehubah atau panggilan fungsi, dsb.) yang ditakrifkan dalam fail sumber lain; dalam Atur cara boleh memanggil fungsi dalam fail perpustakaan tertentu, dsb. Semua masalah ini perlu diselesaikan oleh penghubung.
  • Tugas utama penyambung ialah menyambungkan fail sasaran yang berkaitan antara satu sama lain, iaitu menyambung simbol yang dirujuk dalam satu fail dengan definisi simbol dalam fail lain, supaya semua fail sasaran ini menjadi Keseluruhan bersatu yang boleh dimuatkan dan dilaksanakan oleh sistem pengendalian.

Bergantung pada kaedah pemautan fungsi perpustakaan yang sama yang ditentukan oleh pembangun, pemprosesan pautan boleh dibahagikan kepada dua jenis:

  • Pepautan statik: Dalam kaedah pemautan ini , Kod fungsi akan disalin daripada perpustakaan pautan statik di mana ia terletak ke program boleh laku akhir. Dengan cara ini, kod ini akan dimuatkan ke dalam ruang alamat maya proses apabila program dilaksanakan. Pustaka pautan statik sebenarnya ialah koleksi fail objek, setiap satunya mengandungi kod untuk satu atau sekumpulan fungsi berkaitan dalam pustaka.
  • Pautan dinamik: Dalam kaedah ini, kod fungsi diletakkan dalam fail objek yang dipanggil perpustakaan pautan dinamik atau objek kongsi. Apa yang dilakukan oleh pemaut pada masa ini ialah merekodkan nama objek yang dikongsi dan sejumlah kecil maklumat pendaftaran lain dalam program boleh laku akhir. Apabila fail boleh laku ini dilaksanakan, keseluruhan kandungan pustaka pautan dinamik akan dipetakan ke dalam ruang alamat maya proses yang sepadan pada masa jalan. Penyambung dinamik akan mencari kod fungsi yang sepadan berdasarkan maklumat yang direkodkan dalam program boleh laku.

Untuk panggilan fungsi dalam fail boleh laku, pemautan dinamik atau pemautan statik boleh digunakan masing-masing. Menggunakan pemautan dinamik boleh menjadikan fail boleh laku akhir lebih pendek dan menjimatkan sedikit memori apabila objek kongsi digunakan oleh berbilang proses, kerana hanya satu salinan kod untuk objek kongsi ini perlu disimpan dalam memori. Tetapi ia tidak semestinya bermakna bahawa menggunakan pautan dinamik adalah lebih baik daripada menggunakan pautan statik. Dalam sesetengah kes, pemautan dinamik boleh menyebabkan beberapa kemudaratan prestasi.

Cadangan berkaitan: "Tutorial Video C"

Atas ialah kandungan terperinci Apakah fail yang dihasilkan selepas menyusun fail sumber dalam bahasa C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn