D Programming Language 2.0

- Wiki
- Search
- Downloads
- Home

Last update Thu Oct 1 22:59:51 2009

# Pragmas

    Pragma:
        pragma ( Identifier )
        pragma ( Identifier , ExpressionList )

    ExpressionList:
    	ExpressionList , Expression
    	Expression

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.

Pragmas can appear as either declarations, Pragma DeclarationBlock, or as statements, PragmaStatement.

    pragma(ident);		   // just by itself

    pragma(ident) declaration; // influence one declaration

    pragma(ident):		   // influence subsequent declarations
        declaration;
        declaration;

    pragma(ident)		   // influence block of declarations
    {   declaration;
        declaration;
    }

    pragma(ident) statement;   // influence one statement

    pragma(ident)		   // influence block of statements
    {   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");

startaddress
  Puts a directive into the object file saying that the function specified in the first argument will be the start address for the program:

      void foo() { ... }
      pragma(startaddress, foo);

  This is not normally used for application level programming, but is for specialized systems work. For applications code, the start address is taken care of by the runtime library.

## 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) { ... }
    }

Copyright © 1999-2009 by Digital Mars ®, All Rights Reserved | Page generated by Ddoc. | Comments