# Remote Paths and Symbols, Symbols

Symbols are passed to the remote indexer and are used during preprocessing. A symbol is essentially the same thing as an object-like macro. For example:
`#define SYMBOL 1`

If the remote builder has been configured properly then RDT may be able to automatically determine the symbols that are "built-in" to the compiler on the remote machine.

Additional symbols may be provided in order to have the preprocessor behave differently for different build configurations. For example if there is a "Debug" build configuration it may be desirable to define a symbol named DEBUG. Preprocessor branches controlled by this symbol will then become active. For example:
`#ifdef DEBUG
// debugging code, becomes active if DEBUG is defined #endif`

It may take some time to initially set up the symbols and other project settings. To avoid having to perform this task for multiple RDT installations, use the import/export mechanism to easily share these settings.

## The Symbols properties page

Languages (left pane)
  Displays languages related to this project. Select one to see corresponding symbols.
Symbol / Value
  List of symbols related to given language.
Add
  Add new symbol
Edit
  Modify selected symbol value/dd>
Delete
  Remove selected symbol
Export / Unexport
  Toggle selected symbol exported or not
Show built-in values
  Check to display system (built-in) includes.

## Adding a Symbol

Click Add on the Symbols properties page. The Add Symbol dialog appears. Enter the name of the symbol and optionally a value. The name must be a valid identifier as understood by the C/C++ preprocessor.

Check the Add to all configurations checkbox to add the symbol to all build configurations. Otherwise, the symbol will only be added to the build configuration selected on the properties page.

Check the Add to all languages checkbox to add the include path to all languages. Otherwise, the symbol will only be added to the language selected on the properties page.