Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Microsoft'a Özgü
C makroları, kaynak kodunuz içine derleme kodu eklemek için kullanışlı bir yol sunar, ancak makro tek bir mantıksal satıra genişlediğinden ek bakım isterler. Sorunsuz makrolar oluşturmak için şu kuralları izleyin:
__asm
Bloğu ayraç içine alın.Anahtar sözcüğünü
__asm
her derleme yönergesinin önüne yerleştirin.Eski stil C açıklamalarını (
/* comment */
), derleme stili açıklamalar (; comment
) veya tek satırlı C açıklamaları (// comment
) yerine kullanın.
Aşağıdaki örnekte basit bir makro gösterilmektedir:
#define PORTIO __asm \
/* Port output */ \
{ \
__asm mov al, 2 \
__asm mov dx, 0xD007 \
__asm out dx, al \
}
İlk bakışta, son üç __asm
anahtar sözcük gereksiz görünüyor. Ancak makro tek bir satıra genişlediğinden bunlar gereklidir:
__asm /* Port output */ { __asm mov al, 2 __asm mov dx, 0xD007 __asm out dx, al }
Üçüncü ve dördüncü __asm
anahtar sözcükler deyim ayırıcıları olarak gereklidir. Bloklarda __asm
tanınan tek deyim ayırıcıları yeni satır karakteri ve __asm
anahtar sözcüktür. Makro olarak tanımlanan bir blok tek bir mantıksal çizgi olduğundan, her yönergeyi ile __asm
ayırmanız gerekir.
Ayraçlar da gereklidir. Bunları atlarsanız, derleyici makro çağırmasının sağındaki aynı satırdaki C veya C++ deyimleriyle karıştırılabilir. Kapanış ayracı olmadan, derleyici derleme kodunun nerede durduğundan bahsedemez ve blok sonrasında __asm
derleme yönergeleri olarak C veya C++ deyimlerini görür.
Noktalı virgülle (;) başlayan derleme stili açıklamalar satırın sonuna kadar devam eder. Derleyici, açıklamadan sonra mantıksal satırın sonuna kadar her şeyi yoksaydığından bu, makrolarda sorunlara neden olur. Aynı durum tek satırlı C veya C++ açıklamaları ( için de// comment
geçerlidir). Hataları önlemek için, makro olarak tanımlanan bloklarda /* comment */
eski stil C açıklamalarını (__asm
) kullanın.
__asm
C makro olarak yazılmış bir blok bağımsız değişken alabilir. Ancak, normal bir C makros un aksine, makro __asm
bir değer döndüremez. Bu nedenle bu tür makroları C veya C++ ifadelerinde kullanamazsınız.
Bu türdeki makroları ayrım gözetmeden çağırmamaya dikkat edin. Örneğin, kuralla bildirilen bir işlevde derleme dili makrosunun çağrılmasına __fastcall
beklenmeyen sonuçlar neden olabilir. (Bkz. Satır İçi Derlemede Yazmaçları Kullanma ve Koruma.)
END Microsoft'a Özgü