Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Melihat Kod Instantiated Templat C?

Bagaimana untuk Melihat Kod Instantiated Templat C?

Linda Hamilton
Linda Hamiltonasal
2024-10-27 15:53:29149semak imbas

How to View the Instantiated Code of C   Templates?

Melihat Kod Instantiated Templat C

Dalam C , ia boleh memberi manfaat untuk memeriksa kod yang dijana oleh pengkompil untuk fungsi atau kelas templat. Sebagai contoh, pertimbangkan templat berikut:

<code class="cpp">template <class T> T add(T a, T b) {
    return a + b;
}</code>

Apabila dipanggil dengan jenis tertentu, seperti add(10, 2), kami mungkin mahu melihat fungsi yang pengkompil cipta untuk khusus ini pengkhususan.

Pilihan Pengkompil untuk Mencapai Keterlihatan

Satu cara untuk mencapainya ialah dengan menggunakan pilihan -Xclang -ast-print -fsyntax-only dengan Clang. Pilihan ini mengarahkan pengkompil untuk mencetak pepohon sintaks abstrak (AST) bagi templat yang diwujudkan.

Contoh Penggunaan

Mari kita buat fail ujian bernama test.cpp yang mengandungi kod berikut:

<code class="cpp">template <class T> T add(T a, T b) {
    return a + b;
}

void tmp() {
    add<int>(10, 2);
}</code>

Untuk melihat kod instantiated untuk pengkhususan int, jalankan arahan berikut:

$ clang++ -Xclang -ast-print -fsyntax-only test.cpp

Clang Output

Untuk Clang versi 5.0 atau lebih baru, output akan kelihatan seperti ini:

template <class T> T add(T a, T b) {
    return a + b;
}
template<> int add<int>(int a, int b) {
    return a + b;
}
void tmp() {
    add<int>(10, 2);
}

Output ini menunjukkan templat asal, diikuti dengan add fungsi yang telah digunakan oleh pengkompil.

Atas ialah kandungan terperinci Bagaimana untuk Melihat Kod Instantiated Templat 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