Symbol Value Restrictions


The new home for Visual Studio documentation is Visual Studio 2017 Documentation on

The latest version of this topic can be found at Symbol Value Restrictions.

A symbol value can be any integer expressed in the normal manner for #define preprocessor directives. Here are some examples of symbol values:


Symbol values for resources (accelerators, bitmaps, cursors, dialog boxes, icons, menus, string tables, and version information) must be decimal numbers in the range from 0 to 32,767 (but cannot be hexadecimal). Symbol values for parts of resources, such as dialog box controls or individual strings in the string table, can be from 0 to 65,534 or from -32,768 to 32,767.

Resource symbols are 16 bit numbers. You may enter them as signed or unsigned, however, they are used internally as unsigned integers. So negative numbers will be cast to their corresponding positive value.

Here are some limitations of symbol values:

  • The Visual Studio development environment and MFC use some number ranges for special purposes. All numbers with the most significant bit set (-32,768 to -1 or 32,768 to 65,534, depending on sign) are reserved by MFC.

  • You cannot define a symbol value using other symbol strings. For example, the following symbol definition is not supported:

    #define IDC_MYEDIT  IDC_OTHEREDIT  //not supported  
  • You cannot use preprocessor macros with arguments as value definitions. For example:

    #define   IDD_ABOUT  ID(7) //not supported  

    is not a valid expression regardless of what ID evaluates to at compile time.

  • Your application may have an existing file containing symbols defined with expressions. For more information on how to include the symbols as read-only symbols, see Using Shared (Read Only) or Calculated Symbols.

For more information on number ranges, see TN023: Standard MFC Resources.

For information on adding resources to managed projects, please see Resources in Applications in the .NET Framework Developer's Guide. For information on manually adding resource files to managed projects, accessing resources, displaying static resources, and assigning resources strings to properties, see Walkthrough: Using Resources for Localization with ASP.NET.


Changing a Symbol's Numeric Value
Symbol Name Restrictions
Predefined Symbol IDs