Pragmas
Pragma:
pragma ( Identifier )
pragma ( Identifier , ExpressionList )
Pragmas are a way to pass special information to the compiler
and to add vendor specific extensions to D.
Pragmas can be used by themselves terminated with a ';',
they can influence a statement, a block of statements, a declaration, or
a block of declarations.
pragma(ident);
pragma(ident) declaration;
pragma(ident): declaration;
declaration;
pragma(ident) { declaration;
declaration;
}
pragma(ident) statement;
pragma(ident) { statement;
statement;
}
The kind of pragma it is is determined by the
Identifier.
ExpressionList is a comma-separated list of
AssignExpressions. The
AssignExpressions must be
parsable as expressions, but what they mean semantically
is up to the individual pragma semantics.
Predefined Pragmas
All implementations must support these, even if by just ignoring
them:
- msg
- Prints a message while compiling, the AssignExpressions must
be string literals:
pragma(msg, "compiling...");
- lib
- Inserts a directive in the object file to link in the library
specified by the AssignExpression.
The AssignExpressions must be a string literal:
pragma(lib, "foo.lib");
Vendor Specific Pragmas
Vendor specific pragma
Identifiers can be defined if they
are prefixed by the vendor's trademarked name, in a similar manner
to version identifiers:
pragma(DigitalMars_funky_extension) { ... }
Compilers must diagnose an error for unrecognized
Pragmas,
even if they are vendor specific ones. This implies that vendor
specific pragmas should be wrapped in version statements:
version (DigitalMars)
{
pragma(DigitalMars_funky_extension) { ... }
}