Semua kompiler C ++ memiliki satu masalah kinerja serius yang harus dihadapi. Mengkompilasi kode C ++ adalah proses yang panjang dan lambat.
Mengkompilasi tajuk yang termasuk di atas file C ++ adalah proses yang sangat panjang dan lambat. Mengompilasi struktur header besar yang membentuk bagian dari Windows API dan pustaka API besar lainnya adalah proses yang sangat , sangat lama, lambat. Harus melakukannya berulang-ulang untuk setiap file sumber Cpp adalah lonceng kematian.
Ini tidak unik untuk Windows tetapi masalah lama yang dihadapi oleh semua kompiler yang harus dikompilasi terhadap API besar seperti Windows.
Kompiler Microsoft dapat memperbaiki masalah ini dengan trik sederhana yang disebut header terkompilasi . Triknya cukup apik: meskipun setiap file CPP berpotensi dan secara hukum memberikan arti sligthly yang berbeda pada rantai file header yang disertakan di atas setiap file Cpp (dengan hal-hal seperti memiliki # makro berbeda sebelum menentukan termasuk, atau dengan memasukkan tajuk dalam urutan berbeda), yang paling sering tidak demikian. Sebagian besar waktu, kami memiliki lusinan atau ratusan file yang disertakan, tetapi semuanya dimaksudkan untuk memiliki arti yang sama untuk semua file Cpp yang dikompilasi dalam aplikasi Anda.
Kompiler dapat menghemat banyak waktu jika tidak harus mulai mengkompilasi setiap file Cpp ditambah lusinannya secara harfiah dari awal setiap waktu.
Caranya terdiri dari menunjuk file header khusus sebagai titik awal dari semua rantai kompilasi, yang disebut file 'precompiled header', yang biasanya merupakan file bernama stdafx.h hanya karena alasan historis.
Cukup daftarkan semua tajuk besar Anda untuk API Anda di file stdafx.h Anda, dalam urutan yang sesuai, dan kemudian mulailah setiap file CPP Anda di bagian paling atas dengan #include "stdafx.h"
, sebelum konten yang bermakna (hanya tentang satu-satunya hal yang diperbolehkan sebelumnya adalah komentar).
Dalam kondisi tersebut, alih-alih memulai dari awal , kompiler mulai mengkompilasi dari hasil kompilasi yang sudah tersimpan sebelumnya stdafx.h
.
Saya tidak percaya bahwa trik ini unik untuk kompiler Microsoft, saya juga tidak berpikir itu adalah pengembangan asli.
Untuk Microsoft kompiler, pengaturan bahwa kontrol penggunaan header dikompilasi dikendalikan oleh argumen baris perintah untuk compiler: /Yu "stdafx.h"
. Seperti yang dapat Anda bayangkan, penggunaan stdafx.h
nama file hanyalah sebuah konvensi; Anda dapat mengubah nama jika diinginkan.
Dalam Visual Studio 2010, pengaturan ini dikendalikan dari GUI melalui Mengklik kanan pada Proyek CPP, memilih 'Properti' dan menavigasi ke "Properti Konfigurasi \ C / C ++ \ Precompiled Header". Untuk versi lain dari Visual Studio, lokasi di GUI akan berbeda.
Perhatikan bahwa jika Anda menonaktifkan header yang dikompilasi (atau menjalankan proyek Anda melalui alat yang tidak mendukungnya), itu tidak membuat program Anda ilegal; itu berarti bahwa alat Anda akan mengkompilasi semuanya dari awal setiap kali.
Jika Anda membuat perpustakaan tanpa ketergantungan Windows, Anda dapat dengan mudah berkomentar atau menghapus #include
s dari stdafx.h
file. Tidak perlu menghapus file itu sendiri, tetapi jelas Anda dapat melakukannya juga, dengan menonaktifkan pengaturan header precompile di atas.