The debugger can evaluate simple expressions that can be displayed in the Watch window or as a tool-tip in the code editor.
The simplest expression is an identifier the debugger tries to interpret in the following order:
Numbers can be used in expressions. Hexadecimal numbers must be prefixed with 0x.
Registers can be referenced by prefixing the register name with @.
The standard C and C++ operators !, ~, *, /, %, +, -, >>, <<, <, <=, >, >=, ==, |, &, ^, &&, and || are supported on numeric types.
The standard assignment operators =, +=, -=, *=, /=, %=, >>, >>=, <<=, &=, |=, ^= are supported on numeric types.
The array subscript operator ‘[]’ is supported on array and pointer types.
The structure access operator ‘.’ is supported on structured types (this also works on pointers to structures), and -> works similarly.
The dereference operator (prefix ‘*’) is supported on pointers, the address-of (prefix ‘&’) and sizeof operators are supported.
The addressof( filename , linenumber ) operator will return the address of the specified source code line number.
Function calling with parameters and return results.
Casting to basic pointer types is supported. For example, (unsigned char *)0x300 can be used to display the memory at a given location.
Casting to basic array types is supported. For example, (unsigned char[256])0x100 can be used to reference a memory region.
Operators have the precedence and associativity one expects of a C-like programming language.