Back to Vala Reference Manual

Preprocessor

The Vala preprocessor is a particular part of Vala that acts at syntax level only, allowing you to conditionally write pieces of your software depending upon certain compile-time conditions. Preprocessor directives will never be generated in the resulting code.

Directives syntax

All preprocessor directives start with a hash (#), except for the first line of a file starting with #! (used for Vala scripts).

  • vala-code:

    • [ any vala code ] [ pp-condition ] [ any vala code ]


    pp-condition:

    • #if pp-expression vala-code [ pp-elif ] [ pp-else ] #endif


    pp-elif:

    • #elif pp-expression vala-code [ pp-elif ]


    pp-else:

    • #else vala-code


    pp-expression:

    • pp-or-expression


    pp-or-expression:

    • pp-and-expression [ || pp-and-expression ]


    pp-and-expression:

    • pp-binary-expression [ && pp-binary-expression ]


    pp-binary-expression:

    • pp-equality-expression
      pp-inequality-expression


    pp-equality-expression:

    • pp-unary-expression [ == pp-unary-expression ]

    pp-inequality-expression:

    • pp-unary-expression [ != pp-unary-expression ]


    pp-unary-expression:

    • pp-negation-expression
      pp-primary-expression


    pp-negation-expression:

    • ! pp-unary-expression


    pp-primary-expression:

    • pp-symbol
      ( pp-expression )
      true
      false


    pp-symbol:

    • identifier

The semantics of the preprocessor are very simple: if the condition is true then the Vala code surrounded by the preprocessor will be parsed, otherwise it will be ignored. A symbol evaluates to true if it is defined at compile-time. If a symbol in a preprocessor directive is not defined, it evaluates to false.

Defining symbols

It's not possible to define a preprocessor symbol inside the Vala code (like with C). The only way to define a symbol is to feed it through the valac option -D.

Built-in defines

Name

Description

POSIX

Set if the profile is posix

GOBJECT

Set if the profile is gobject

DOVA

Set if the profile is dova

VALA_X_Y

Set if Vala API version is equal or higher to version X.Y

DBUS_GLIB

Set if using dbus-glib-1 package

Examples

TODO: write examples.

Projects/Vala/Manual/Preprocessor (last edited 2013-11-22 16:48:25 by WilliamJonMcCann)