Optimizer put that variable into register.
If you look it in debugger with Show disassembly you see it in eax.
EDIT:
75:
76: top = -1;
00401160 or dword ptr [top],-FF
77: flag = 0;
78:
79: for (i = 0; expression[i] != '\0'; i++)
00401164 xor ebx,ebx
00401166 jmp 004011D5
{
if (isbracket(expression[i]))
00401168 movzx eax,byte ptr [expression+ebx]
...
89: {
90: flag = 1;
91: break;
004011CD mov eax,00000001
004011D2 jmp 004011DE
92: }
...
Without optimization or volatile int flag you can step to that line too.