Tengo este código aquí ::
int f(int x, int *py, int **ppz) { int y, z; **ppz += 1; z = **ppz; *py += 2; y = *py; x += 3; return x + y + z; } int main() { int c, *b, **a; c = 4; b = &c; a = &b; printf( "%d\n", f(c,b,a)); printf( "%d\n", c); }(Por favor, elija los archivos de encabezado en consecuencia)
Cuando ejecuto este código como un programa C++, funciona sin problemas. Pero, cuando lo ejecuto como un programa en C, completa su ejecución, imprime todos los valores, pero en la última línea del código, da un error de tiempo de ejecución. Adjunté un depurador y al final del programa (mientras ejecutaba este código en C) al hacer clic en Step-Over, me lleva a un archivo min_gw, que se parece a esto:
__mingw_CRTStartup() __mingw_CRTStartup+208: mov %eax,%ebx __mingw_CRTStartup+210: call 0x407fb0 <_cexit> __mingw_CRTStartup+215: mov %ebx,(%esp) __mingw_CRTStartup+218: call 0x408088 <ExitProcess@4> __mingw_CRTStartup+223: nop¿Qué es este archivo? ¿Y por qué falla el código en C?
Referencias de Ideone ::
C++ :: http://ideone.com/Ubb71k
Gracias por cualquier ayuda de antemano.. :)
Todas las versiones de C++ y C desde C99 agregan un return 0; al final de la principal antes de caer al final.
C89 (que es el valor predeterminado para la mayoría de los compiladores) no lo hace, por lo que es UB si realmente regresa de main cayéndose del final.
Editar: en la práctica (suponiendo que se está ejecutando sin desinfectantes), esto significa que devolverá lo que sea que ya esté en $eax , es decir, el valor de retorno de la última función. Dado que printf generalmente devuelve un valor distinto de cero, eso se trata como una falla.
Olvidó la declaración de devolución al final de main que indica el éxito.