Definování __asm bloky jako c makra
Konkrétní společnosti Microsoft
C makra nabízí pohodlný způsob sestavení kód vložit do zdrojového kódu, ale jejich poptávky zvláštní pozornost, protože makro rozšíří do jednoho logického řádku.Vytváření bezproblémového makra, postupujte podle těchto pravidel:
Uzavřete __asm zablokovat ve složených závorkách.
Umístit __asm před každou instrukci sestavení klíčové slovo.
Použít starý styl c komentáře ( /* comment */) namísto sestavení Styl komentáře ( ; comment) nebo Jednořádkové komentáře C ( // comment).
Pro ilustraci, následující příklad definuje jednoduchý makra:
#define PORTIO __asm \
/* Port output */ \
{ \
__asm mov al, 2 \
__asm mov dx, 0xD007 \
__asm out dx, al \
}
Na první pohled posledních tří __asm klíčová slova zřejmě nadbytečné.Jsou potřeba, ale protože makro rozšíří do jednoho řádku:
__asm /* Port output */ { __asm mov al, 2 __asm mov dx, 0xD007 __asm out dx, al }
Třetí a čtvrté __asm klíčová slova jsou potřebné jako oddělovače prohlášení.Rozpoznán pouze prohlášení oddělovače v __asm bloky jsou se znakem a __asm klíčové slovo.Blok definována jako makro je jedné logické linky, a proto je třeba oddělit každou instrukci s __asm.
Závorky jsou také nezbytné.Pokud je vynecháte, může kompilátor matoucí c nebo C++ příkazy na stejném řádku vpravo vyvolání makro.Bez pravá složená závorka kompilátor nelze zjistit kdy přestane kódu sestavení a vidí c nebo C++ příkazy __asm bloku jako pokyny pro sestavení.
Sestavení Styl komentáře začínající středníkem (;) nadále konec řádku.To protože kompilátor ignoruje všechno po komentář až do konce řádku logické způsobuje problémy v makrech.Totéž platí o jeden řádek komentáře c nebo C++ ( // comment).Chcete-li zabránit chybám použít starý styl c komentáře ( /* comment */) v __asm bloky, které jsou definovány jako makra.
__asm Blok zapsán jako c makro může trvat argumenty.Na rozdíl od běžných c makru, však __asm makro nemůže vracet hodnotu.Aby tato makra nelze použít ve výrazech c nebo C++.
Dejte pozor, abyste uvážlivě vyvolat makra tohoto typu.Například vyvolání makru jazyka symbolických funkce deklarované s __fastcall úmluvy mohou způsobit neočekávané výsledky.(Viz použití a zachování registry v sestavení vložené.)
Konec konkrétní společnosti Microsoft