#if
#if
is a compile-time if statement. It looks like a normal if
statement, except its condition must be resolvable at compile time.
This is because it controls whether or not the body of the #if
statement are included in the compilation.
Static-ifs can be used inside and outside of procedures.
Outside of Procedures
When outside of a procedure, static-ifs can be used to control whether or not certain symbols are defined in the current compilation.
DEBUG_MODE :: true
#if DEBUG_MODE {
// This procedure is only defined if DEBUG_MODE is true
debug_only_procedure :: () {
// ...
}
} else {
// This procedure is only defined if DEBUG_MODE is false
not_a_debug_procedure :: () {
}
}
Static-ifs can contain any top-level "thing" in the language: procedures, structures,
unions, and even #load
directives. Using this feature, you can optionally
include files depending on a condition.
USE_EXTENSIONS :: false
MINIMUM_EXTENSION_VERSION :: 5
#if USE_EXTENSIONS && MINIMUM_EXTENSION_VERSION >= 3 {
#load "./extensions/v3"
}
Inside of procedures
When inside a procedure, static-ifs can contain statements that will only be
included if the static-if resolves to be true
.
DEBUG_MODE :: true
draw :: () {
#if DEBUG_MODE {
draw_debug_ui();
}
// ...
}
Other uses
See the #defined
documentation for more uses of static-if statements.