¿Cómo comprobar si una variable ha sido inicializada en C?

¿Hay alguna forma de verificar si una variable se ha inicializado o no en C?

Considere el siguiente ejemplo,

int main(){ int a = 3, b = 7, c; if ( a > b ) c = ab; // Now, how can I check if the variable "c" has some value or not // I don't want check like this, // if ( isalpha(c) ) or if ( isdigit(c) ) // or anything similar to like that } 

En otras palabras, C tiene alguna función como la defined en Perl . En Perl , simplemente puedo hacer if (defined c) que compruebe si la variable está definida o no, y devolvería False para el ejemplo anterior. ¿Cómo puedo lograr lo mismo en C?

C no tiene esta habilidad. Tienes dos opciones principales:

Un valor centinela

Por ejemplo, si sabe que el valor de c nunca será negativo, inicialícelo en -1 y pruebe eso.

Añadir otra variable

Cree otra variable bool we_set_c_to_something = false; y luego configúrelo en true cuando escriba en c .

Pregunta equivocada. No estás preguntando si la variable está definida . Si la variable no está definida, la comstackción falla. Busque la diferencia entre “statement” y “definición”. En el caso de esas variables locales, ha definido la variable c.

Lo que estás buscando es inicialización . Muchos comstackdores le advertirán sobre el uso de variables antes de que se inicialicen, pero si persiste en ejecutar ese código, se supone que sabe que es mejor que el comstackdor. Y en ese punto es tu problema. 🙂 Algunos idiomas (por ejemplo, Perl) tienen una bandera adicional que viaja junto con una variable para indicar si se ha inicializado o no, y se esconden de usted que hay una bandera adicional alrededor de la cual puede o no necesitarla. Si quieres esto en C, necesitas codificarlo tú mismo.

Dado que C ++ permite la sobrecarga del operador, es relativamente fácil implementar esto en C ++. Boost proporciona una plantilla ” opcional ” que lo hace, o usted podría hacer su propio rollo si desea un ejercicio de encoding. Sin embargo, C no tiene el concepto de sobrecarga del operador (demonios, el concepto realmente no existía, y los comstackdores del día probablemente no podrían haberlo soportado de todos modos), así que obtienes lo que obtienes.

Perl es un caso especial porque enrolla los dos juntos, pero C no. Es posible en C tener variables definidas pero no inicializadas. De hecho, hay muchos casos en los que queremos que ese sea el caso, especialmente cuando comienzas a hacer un acceso de bajo nivel a la memoria para los controladores y cosas por el estilo.

C es un lenguaje comstackdo que no admite el enlace de variables en tiempo de ejecución, mientras que Perl es un lenguaje interpretado que admite la escritura dinámica. Así que puedes verificar la definición de una variable en Perl, pero no en C.

Cuando declara una variable en C int c; , esta variable c está definida pero sin inicialización. La statement y la definición están en una statement.

La definición de una variable en C no es verificada por el escritor de códigos. Los comstackdores lo hacen por ti. Cuando compile y vincule su código C, el comstackdor verificará todas las definiciones de variables. Se invocará un error y el proceso de comstackción o vinculación se detendrá si se encuentran variables no definidas en su código.

Espero que esto te haga distinguir las diferencias.