En C++ genera algo llamado comportamiento no definido (mejor conocido como UB). Como su nombre lo indica cualquier cosa puede pasar, por ejemplo:
A) Funciona correctamente, no hay problema.
B) El programa revienta.
C) Se generan resultados aleatorios.
D) Cualquier otra cosa.
Y ese es el problema: no hay garantías en cuanto a la ejecución del programa. Yo te recomendaría que revisaras la documentación de tu compilador para conocer que extensiones (al lenguaje) soporta.
Repito, está definido en el estándar C99 (dije C98 pero lo acabo de comprobar y era C99):
Design
C99 is, for the most part, backward compatible with C89 but is stricter in some ways.
In particular, a declaration that lacks a type specifier no longer has int implicitly assumed. The C standards committee decided that it was of more value for compilers to diagnose inadvertent omission of the type specifier than to silently process legacy code that relied on implicit int. In practice, compilers are likely to display a warning, then assume int and continue translating the program.
C99 introduced several new features, many of which had already been implemented as extensions in several compilers:
- inline functions
- intermingled declarations and code: variable declaration is no longer restricted to file scope or the start of a compound statement (block), similar to C++
several new data types, including long long int, optional extended integer types, an explicit boolean data type, and a complex type to represent complex numbers
- variable-length arrays
- support for one-line comments beginning with //, as in BCPL or C++
- new library functions, such as snprintf
- new header files, such as stdbool.h, complex.h, tgmath.h, and inttypes.h
- type-generic math functions
- improved support for IEEE floating point
...
http://en.wikipedia.org/wiki/C99#DesignY bueno, compiladores no hay muchos. Salvo que utilize uno prehistorico debería funcionar con el mismo Mingw (o g++ en Linux).