2010-11-21 18 views
17

Bu Önişlemci tanımlarından bazıları WinMain işlevi ve diğer pencere kitaplığı işlevlerinde bulunur. Amaçları nedir? Nasıl çalışırlar? bunları uygulamalarınıza veya işlev çağrılarınıza yazmak iyi bir uygulama mıdır?__in __out __in_opt __allowed() işlevinin amacı nedir, nasıl çalışırlar? Kendi kodumda benzer yapıları kullanmalı mıyım?

#define __in 
#define __out 
#define __in_opt 

onlar Preprocessor geçişte şey ile yer değiştirirler Anlamı:

Benim ilk araştırma onlar sadece equlivalent yerleştik öneriyor. Herhangi bir işlevsellik olmadan sadece bir doküman metodu mu?

Öyleyse, bu gibi sıraya kod belgeleyen avantaj görebilirsiniz. Doxygen gibi bir şeyle parametre adlarını iki kere yazmanız gerekir. Yani bu teoride

Ben __allowed() çalışmak gerekiyordu nasıl hiçbir teori var ... çoğaltılması azaltmaya yardımcı ve tutarlılığı korumak olabilir.

cevap

23

Onlar Kaynak kodu Ek Açıklama Dili SAL ek açıklamalardır. Microsoft yazılımı buna göre değişir. MSDN Kitaplığı makalesi is here. İyi bir örnek Code Analysis. Başka bir ilgisiz araç, ancak bu ek açıklamalarla güçlendirilmiş Pinvoke Interop Asistanı.

+0

Araçlar güvenilir olmayan ve yanlış bilgilere bağlı olduğunda sorun değil mi? –

+0

Takımlar yanlış bilgilere bağlı olduğunda her zaman bir sorun olur. SAL ek açıklamaları farklı değildir. Tabii ki biraz riskli, ama bu C'nin deklarasyon/tanım mimarisine özgü olan - her zaman onların eşleştiğinden emin olmalısınız. – MSalters

+0

@Cheers SAL ek açıklamaları hem arayan hem de arayan için Kod Analizi tarafından kontrol edilir. Ek açıklamalar yalnızca yazarın niyetini ifade etmekle kalmaz, aynı zamanda doğrulanır (mümkün olduğunda). Bu nedenle ne güvenilir ne de yanlıştırlar. Void foo (_In_opt_ int * p) düşünün {* p = 42; } '.'P' parametresi isteğe bağlı olarak işaretlenir ancak uygulama her zaman geçerli olacağını varsayar. Kod Analizi sorunu tespit edecek ve teşhis bilgileri sağlayacaktır. – IInspectable

-2

Bunlar, Microsoft makroları genellikle hiçbir şey genişletin ve okuyucuya ipuçları olması amaçlanmıştır. Bununla birlikte, en son kontrol ettiğim zaman, örn. MessageBox argümanındaki ipucu tamamen yanlıştı, ilk, ikinci ve üçüncü argümanın (varsayılan olarak 0 belirttiğinizde) yararlı varsayılan değerlere sahip olduğunu ima ederken, gerçekte varsayılan değerlere sahip ilk ve dördüncü argümanıdır. Belki de "Hata" için varsayılan olan bağımsız değişken argümanı olabilir, ama asla bu işe yaramazdım. Yani, sadece Microsoft bir şey, güvenemeyeceğiniz ve güvenmemeniz gereken ipuçları, sadece görsel karmaşayı yanıltıcıdır.

Şerefe & hth. Onlar kod kârları gibi Microsoft semantik analiz aracında alıştığınız

5

. Bu aracı kendiniz kullanmayı planlamıyorsanız, bunları kullanmanın pek bir amacı yoktur.

9

SAL ek açıklamaları iki şey için faydalıdır:

    PREfast (analiz/derleme) ek açıklamalar bakıp bir işlev çağrılmalıdır anlamaya ve hızlı bir şekilde yapabilirsiniz
  • İnsan okuyucular aracılığıyla
  • Statik analiz Giriş/çıkış parametrelerini belirler.

Makrolar, kodunuz analiz ile derlendiğinde aslında çeşitli declspec ifadelerine genişler. Bu ek açıklamaları her zaman kodumda kullanırım.

İlgili konular