Cita:
Iniciado por MaxExtreme
Si un compilador hace tal comprobación en cada paso, podemos ir mandándole al Hall of Shame.
Je, en realidad esta haciendo EXACTAMENTE lo que el codigo pide
Código:
#include <stdio.h>
void main()
{
while(1)
{
printf("shame on you compiler!\r\n");
};
}
cl shame.cpp (en negrita marcada la operacion redundante):
Código:
_main:
00000000: 55 push ebp
00000001: 8B EC mov ebp,esp
00000003: B8 01 00 00 00 mov eax,1
00000008: 85 C0 test eax,eax
0000000A: 74 0F je 0000001B
0000000C: 68 00 00 00 00 push offset $SG611
00000011: E8 00 00 00 00 call _printf
00000016: 83 C4 04 add esp,4
00000019: EB E8 jmp 00000003
0000001B: 5D pop ebp
0000001C: C3 ret
cl shame.cpp /O1 (esta es la opcion por defecto en REALEASE desde el IDE):
Código:
_main:
00000000: 68 00 00 00 00 push offset ??_C@_0BJ@GJEKHHMF@shame?5on?5
you?5compiler?$CB?$AN?6?$AA@
00000005: E8 00 00 00 00 call _printf
0000000A: 59 pop ecx
0000000B: EB F3 jmp _main
Ni siquiera contempla la posibilidad de retornar jamas
Código:
#include <stdio.h>
void main()
{
for (;;)
{
printf("shame on you compiler!\r\n");
};
}
cl shame.cpp:
Código:
_main:
00000000: 55 push ebp
00000001: 8B EC mov ebp,esp
00000003: 68 00 00 00 00 push offset $SG611
00000008: E8 00 00 00 00 call _printf
0000000D: 83 C4 04 add esp,4
00000010: EB F1 jmp 00000003
cl shame.cpp /O1
Código:
_main:
00000000: 68 00 00 00 00 push offset ??_C@_0BJ@GJEKHHMF@shame?5on?5
you?5compiler?$CB?$AN?6?$AA@
00000005: E8 00 00 00 00 call _printf
0000000A: 59 pop ecx
0000000B: EB F3 jmp _main
Como vemos el resultado final con optimizacion es exactamente el mismo