Aracılığıyla paylaş


İşlevlerle makrolar arasında seçim önerileri

Microsoft çalışma zamanı kitaplığı yordamlarının çoğu derlenmiş veya birleştirilmiş işlevlerdir, ancak bazı yordamlar makro olarak uygulanır. Üst bilgi dosyası bir yordamın hem işlevini hem de makro sürümünü bildirdiğinde, makro tanımı her zaman işlev bildiriminden sonra göründüğünden öncelikli olur. Hem işlev hem de makro olarak uygulanan bir yordamı çağırdığınızda, derleyiciyi işlev sürümünü iki şekilde kullanmaya zorlayabilirsiniz:

  • Rutin adı parantez içine alın.

    #include <ctype.h>
    a = _toupper(a);    // Use macro version of toupper.
    a = (_toupper)(a);  // Force compiler to use
                        // function version of toupper.
    
  • Şu yönergeyle #undef makro tanımını "tanımdan kaldırın":

    #include <ctype.h>
    #undef _toupper
    

Bir işlev ile bir kitaplık yordamının makro uygulaması arasında seçim yapmanız gerekiyorsa aşağıdaki dengeleri göz önünde bulundurun:

  • Hız ve boyut Makro kullanmanın temel avantajı daha hızlı yürütme süresidir. Ön işleme sırasında, bir makro her kullanıldığında satır içi olarak genişletilir (tanımıyla değiştirilir). İşlev tanımı, kaç kez çağrıldıktan bağımsız olarak yalnızca bir kez gerçekleşir. Makrolar kod boyutunu artırabilir ancak işlev çağrılarıyla ilişkili ek yüke sahip değildir.

  • İşlev değerlendirmesi İşlev bir adres olarak değerlendirilir; makro değerlendirilmez. Bu nedenle, işaretçi gerektiren bağlamlarda makro adı kullanamazsınız. Örneğin, bir işlev işaretçisi bildirebilirsiniz, ancak makro işaretçisi bildiremezsiniz.

  • Tür denetimi İşlev bildirdiğinizde, derleyici bağımsız değişken türlerini denetleyebilir. Makro bildiremediğiniz için, derleyici makro bağımsız değişken türlerini denetleyemez; ancak makroya geçirdiğiniz bağımsız değişkenlerin sayısını denetleyebiliyor.

Ayrıca bkz.

Tür-genel matematik
C çalışma zamanı (CRT) ve C++ Standart Kitaplığı (STL) .lib dosyaları