Ist das NO_ASM für "Assembler" oder für "InlineAssembler" gedacht?
In Win64 ist Assembler möglich, aber InlineAssembler gibt es leider nicht mehr,
also ganze Methode als Assembler = JA, aber kurzes Assembler-Stück innerhalb einer Pascal-Methode = NEIN.
Ich versuche persönlich von NOT-DEFINED Abstand zu halten, weil N da im IFNDEF zu leicht zu übersehen ist.
Delphi-Quellcode:
{$IFDEF FPC}
// Turn ASM off for FPC as we do not know enough about ASM support on FPC
{$DEFINE NO_ASM}
{$ELSE}
{$IFDEF ASSEMBLER}
{$IFDEF WINDOWS}
{$UNDEF NO_ASM}
{$ELSE}
{$DEFINE NO_ASM}
{$ENDIF}
{$ELSE}
{$DEFINE NO_ASM}
{$ENDIF}
{$ENDIF}
Und mit OR/AND lässt sich so manches verschachteltes IFDEF-Monster vereinfachen und übersichtlicher gestalten.
Delphi-Quellcode:
{$IFDEF FPC}
// Turn ASM off for FPC as we do not know enough about ASM support on FPC
{$DEFINE NO_ASM}
{$ELSE}
{$IF Defined(ASSEMBLER) and Defined(WIN32)} //{$IF Defined(ASSEMBLER) or Defined(WINDOWS)}
{$UNDEF NO_ASM}
{$ELSE}
{$DEFINE NO_ASM}
{$IFEND}
{$ENDIF}
oder
Delphi-Quellcode:
{$DEFINE NO_ASM}
{$IFDEF FPC}
// Turn ASM off for FPC as we do not know enough about ASM support on FPC
{$ELSE}
{$IF Defined(ASSEMBLER) and Defined(WIN32)} //{$IF Defined(ASSEMBLER) or Defined(WINDOWS)}
{$UNDEF NO_ASM}
{$IFEND}
{$ENDIF}
k.A. ob FPC auch "derartige" ConditionalDefines mit Defined() kennt, aber wenn, dann
Delphi-Quellcode:
// Turn ASM off for FPC as we do not know enough about ASM support on FPC
{$IF Defined(ASSEMBLER) and Defined(WIN32) and not Defined(FPC)}
{$UNDEF NO_ASM}
{$ELSE}
{$DEFINE NO_ASM}
{$IFEND}