For modules that are compiled with full CodeView debugging information (/Zi), the expression evaluators automatically translate the decorated names into source form. You specify and view names as they appear in your source. Therefore, debugging is easier when all modules in the program are compiled with full CodeView debugging information. For large programs, however, you may need to compile some modules to include only line numbers and public symbols (/Zd).
CodeView accepts and displays public symbol names as “decorated” names. The decorated name is the form of the name in the object code produced by the compiler. Public symbols are names in library routines or names in modules compiled without CodeView information (that is, compiled with the /Zd option, or compiled without any line or symbolic information and linked with the /CO option).
To get a listing of all names in their decorated and undecorated forms, specify the LINK /MAP:FULL option.
Name decoration is the mechanism used to enforce type-safe linkage. This means that only the names and references with precisely matching spelling, case, calling convention, and type are linked together.
Names declared with the C calling convention (either implicitly or explicitly using the _cdecl keyword) begin with an underscore (_). For example, the function main can be displayed as _main. Pascal names are converted to uppercase and have no prefix. Names declared as _fastcall are converted to uppercase and begin with an at sign (@).
For C++, the decorated name encodes the type of the symbol in addition to the calling convention. This form of the name can be long and difficult to read. The name begins with at least one question mark (?). For C++ functions, the decoration includes the function's scope, the types of the function's parameters, and the function's return type.
For more information on decorated names, see Appendix B.