Description
The use of conditional compilation directives causes the PowerBuilder preprocessor to parse blocks of code before they are passed to the compiler.
Syntax
#IF { NOT } DEFINED predefined_symbols THEN action1 { #ELSEIF DEFINED predefined_symbols THEN action2 } { #ELSE action3 } #END IF
Parameter |
Description |
---|---|
predefined_symbols |
A predefined identifier or a combination of predefined identifiers separated by AND or OR operators. In the current release, you cannot use a user-defined identifier. |
action1, action2, action3 |
The action you want performed if the condition in the previous statement was met. |
Usage
Conditional compilation enables you to include PowerScript code for a specific target type or set of target types in an application. You can also include debug code in your application and specify in the Project painter whether it will be included in your application's executable file.
The preprocessor substitutes blank lines for statements with a leading number (#) sign character. It passes the code in the action statements to the compiler or converts it to blank lines depending on whether the condition in the previous preprocessor directive was met.
The following table displays the predefined symbols, the project types to which they correspond, and their effects on the code passed to the compiler.
Predefined symbols |
Target type |
Code in this processing block |
---|---|---|
PBNATIVE |
Standard PowerBuilder client-server or distributed applications |
Fully parsed for the standard application and converted to blank lines for .NET targets. |
PBWEBSERVICE |
.NET Web Service component targets |
Fully parsed for .NET Web Service targets and converted to blank lines for all other targets. |
DEBUG |
All PowerBuilder standard and .NET targets |
When a project's Enable DEBUG Symbol check box is selected, code is fully parsed by the compiler and included in the deployed application. The code is converted to blank lines when the check box is cleared. The DEBUG symbol is always defined in the development environment. |
You can use the NOT operator to include code for all target types that are not of the type that you specify, and you can use AND and OR operators to combine symbols. For example, code that follows this statement will be parsed for all targets except standard PowerBuilder applications:
#if NOT defined PBNATIVE then
Comments can be added to conditional code blocks if they are preceded by double slash marks ( // ) in the same line of code. You cannot use the PowerScript line continuation character ( & ) in a conditional code statement. You must use it in code that you embed in the conditional block when you use more than one line for a single line of code.
Limitations and error messages
Conditional compilation is not supported in DataWindow syntax, or in structure or menu objects. You cannot edit the source code for an object to include conditional compilation blocks that span function, event, or variable definition boundaries.
You must rebuild your application after you add a DEBUG conditional block.
The following table shows the types of error messages displayed for incorrect conditional compilation code.
Error message |
Description |
---|---|
Invalid if statement |
#if statement without a defined symbol, with an incorrectly defined symbol, or without a then clause |
#end if directive expected |
#if statement without an #end if statement |
Unexpected preprocessor directive |
Caused by an #else, #elseif, or #end if statement when not preceded by an #if statement |
Preprocessor syntax error |
Caused by including text after an #else or #end if statement when the text is not preceded by comment characters (//) |
Examples
When you run or debug the application in the development environment, the following code is always parsed and you always see the message box. When you run the executable file, the code is parsed only if the DEBUG symbol is enabled on the General page in the Project painter:
#if defined DEBUG then MessageBox("Debugging","Ctr value is " + string(i)) #end if
For examples of using conditional compilation in .NET targets, see Deploying Components as .NET Assemblies or Web Services.