Inicialización de variables no estáticas

Estoy leyendo un libro de progtwigción de preguntas frecuentes. Aquí está el pasaje del libro.

Las variables automáticas son variables definidas dentro de una función o bloque de código sin la palabra clave estática. Estas variables tienen valores no definidos si no los inicializa explícitamente. Si no inicializa una variable automática, debe asegurarse de asignarla antes de usar el valor.

Aquí está mi código:

#include  int main (int argc, const char * argv[]) { { int x; printf("%d", x); } } 

El resultado de printf es 0. ¿Por qué se inicializa la variable?

Para variables estáticas y globales es 0; Las variables automáticas no se inicializan por defecto.

en el lenguaje c no hay un valor predeterminado para las variables locales no estáticas. La variable guarda lo que estaba en la memoria antes de que se convirtiera en una variable. Es mejor inicializar siempre una variable local no estática antes de usarla en el lenguaje c (o al menos antes de compararla con otra cosa). También es mejor asumir que no hay un valor predeterminado porque varía de un idioma a otro y de un hardware a otro.

Lea más: http://wiki.answers.com/Q/What_is_the_default_value_of_integer_in_c#ixzz1iaij7hRK

No está inicializado. La celda de memoria que ocupa tu x todavía tiene un valor de uso anterior. Sin embargo, el valor de x puede ser cualquier cosa, por lo que no puede confiar en él.

El valor inicial de una variable automatic si no se inicializa explícitamente es indeterminado.

Indeterminado significa no especificado (podría ser 0 o 42) o una representación de captura. Una trampa significa leer el comportamiento indefinido de la variable sin inicializar (por ejemplo, falla tu progtwig).

No definido significa que podría ser cualquier cosa, incluso 0. Otra implementación puede tener un valor diferente o aleatorio. No hay forma de saberlo, y tampoco se puede confiar en que sea igual en todas las ejecuciones.

Algunos comstackdores harán inicializaciones predeterminadas por ti, otros no. No debes contar con ellos. La línea que dice

 int x; 

debería decir

 int x = 0; 

si es lo que quieres. Para algunos comstackdores de C, es posible que x sea -23157263 en el punto donde se llama a printf.

Porque en el espacio de memoria donde se coloca x ya hay un 0, pero esto es simplemente “suerte”, podría haber cualquier número o símbolo en ese lugar. Entonces, para asegurarse de que siempre obtenga el mismo resultado, siempre debe inicializar una variable.

Recuerdo que Visual Studio establecería (y quizás todavía lo hace) las variables automáticas en 0 o nulo en algunos casos cuando el código fue comstackdo con marcas de depuración. Como han dicho otros, ciertamente no debe contar con ningún valor predeterminado.