Bagikan melalui


Rekomendasi untuk memilih antara fungsi dan makro

Sebagian besar rutinitas pustaka run-time Microsoft dikompilasi atau dirakit fungsi, tetapi beberapa rutinitas diimplementasikan sebagai makro. Ketika file header mendeklarasikan fungsi dan versi makro dari rutinitas, definisi makro diutamakan, karena selalu muncul setelah deklarasi fungsi. Ketika Anda memanggil rutinitas yang diimplementasikan sebagai fungsi dan makro, Anda dapat memaksa pengkompilasi untuk menggunakan versi fungsi dengan dua cara:

  • Sertakan nama rutin dalam tanda kurung.

    #include <ctype.h>
    a = _toupper(a);    // Use macro version of toupper.
    a = (_toupper)(a);  // Force compiler to use
                        // function version of toupper.
    
  • "Undefine" definisi makro dengan direktif #undef :

    #include <ctype.h>
    #undef _toupper
    

Jika Anda perlu memilih antara fungsi dan implementasi makro dari rutinitas pustaka, pertimbangkan trade-off berikut:

  • Kecepatan versus ukuran Manfaat utama menggunakan makro adalah waktu eksekusi yang lebih cepat. Selama praproses, makro diperluas (digantikan oleh definisinya) sebaris setiap kali digunakan. Definisi fungsi hanya terjadi sekali terlepas dari berapa kali disebut. Makro dapat meningkatkan ukuran kode tetapi tidak memiliki overhead yang terkait dengan panggilan fungsi.

  • Evaluasi fungsi Fungsi mengevaluasi ke alamat; makro tidak. Dengan demikian Anda tidak dapat menggunakan nama makro dalam konteks yang memerlukan penunjuk. Misalnya, Anda dapat mendeklarasikan penunjuk ke fungsi, tetapi bukan penunjuk ke makro.

  • Pemeriksaan jenis Saat Anda mendeklarasikan fungsi, pengkompilasi dapat memeriksa jenis argumen. Karena Anda tidak dapat mendeklarasikan makro, pengkompilasi tidak dapat memeriksa jenis argumen makro; meskipun dapat memeriksa jumlah argumen yang Anda berikan ke makro.

Baca juga

Matematika generik jenis
File runtime C (CRT) dan C++ Standard Library (STL) .lib