Hola y bienvenido de nuevo.
En esta conferencia, solo quiero repasar algunos compiladores y advertencias comunes.
Hablamos sobre algunos de los problemas comunes de c.
Pero a veces ni siquiera sabe que tiene esos errores en su programa cuando el
compilador está tratando de decirle eso.
Los errores y advertencias del compilador tienden a ser realmente crípticos para los nuevos programadores.
Es posible que le estén diciendo que le falta un punto y coma, pero dice que el final de la declaración es inalcanzable.
Y para alguien nuevo, es posible que ni siquiera sepa lo que eso significa.
Por lo tanto, se necesita mucha práctica para escribir mucho código
y descifrar algunas de estas advertencias del compilador a lo largo del tiempo.
Pero me gustaría avisarte antes de eso.
Entonces, algunos de los problemas comunes que vio en la lección anterior,
realmente voy a describir algunas de las advertencias y errores del compilador y lo que realmente dirá.
Es muy, muy importante decirle que comprenda lo que le dice el compilador.
Si el compilador le dice que hay errores, pero usted no comprende
ese error, le llevará mucho más tiempo corregir ese código.
Pero si ve el error y sabe exactamente lo que dice, puede
ir y solucionarlo en poco tiempo.
Recuerdo que estaba en el laboratorio cuando comencé a
programar y me faltaba
un punto y coma, algo muy común. Y el compilador me estaría diciendo que me falta un punto
y coma, pero yo
no lo sabría, solo diría un final inalcanzable de la declaración, y yo diría,
¿qué significa eso? ¿Qué es una declaración? Estaría muy confundido.
Por eso quería darte algunos consejos sobre lo que el compilador realmente está tratando de decirte.
Así que es muy difícil entender de qué se queja el compilador.
Descifrar estos mensajes a veces
resulta muy confuso.
Por lo tanto, debe comprender estos errores del compilador para corregirlos, bastante básico.
Y el compilador está haciendo la mitad del trabajo por ti.
Verifica la sintaxis, le dice exactamente qué está mal, por lo
que debe usar eso a su favor.
Pero a veces es difícil entender exactamente lo que dice, especialmente si eres
nuevo y no entiendes parte de la terminología.
El compilador toma decisiones sobre cómo traducir su código que el
programador no ha escrito en el código.
Esto es conveniente para el programa y el compilador, por lo que
se puede escribir de forma más sucinta.
Y solo los programadores expertos aprovechan esta función.
Entonces, lo que le digo es que cuando compile, siempre debe
usar la opción de panel de tablero.
Esto va a encender todo.
Entonces, a veces, una característica más avanzada es que realmente
sacará algunas cosas,
hará que la traducción sea un poco más eficiente.
Pero cuando agrega eso,
hace que el programa se compile de manera diferente.
Y como resultado, es posible que tenga advertencias en su código que no conoce.
Entonces, la razón por la que te digo eso es que siempre quieres compilar con una opción determinada, que
es la opción del panel del tablero.
Y en realidad, de forma predeterminada, está activado en bloques de código.
Y esto le notificará de todos los casos en los que el
compilador está haciendo cosas que usted no conoce.
También activará todas las advertencias, te
dará mucha información, es una opción de compilador muy útil.
Una vez que tenga esa opción activada, puede intentar
ayudarlo a comprender mejor algo de lo que le dice el compilador.
Entonces, el compilador le mostrará dos
tipos de problemas. Uno es un error.
De hecho, esto evitará la creación del programa.
Tiene un error de sintaxis y el programa no se puede compilar.
Ningún trabajo
ejecutable recreado y. Por lo general, cuando ve errores del compilador,
siempre desea concentrarse en ese primer error.
Ese es el error más
confiable porque algunos de los otros errores pueden ser el resultado de ese primer error.
Así que concéntrate siempre en ese primer error. Primero corrija los errores en la parte
superior y luego compile nuevamente y vea si los otros errores desaparecen.
Advertencias. Las advertencias son mensajes que muestra
el compilador para situaciones especiales y en las que se ha detectado algún tipo de anomalía.
Son errores no fatales. Entonces se creará el ejecutable.
Pero sigue siendo algo que debes arreglar.
Hay una advertencia por una razón. O está haciendo algo incorrectamente
o podría causar un problema en el futuro.
Por lo tanto, siempre desea corregir todas sus advertencias.
Y al compilar con la opción de panel de tablero,
no considera que el programa sea correcto hasta que se hayan eliminado todas las advertencias.
Entonces la compilación no fallará. Es por eso que les
digo que utilicen esta opción además de ver todo lo que está sucediendo en el compilador.
Entonces, algunos de los mensajes del compilador más comunes que encontrará, y
esto estará directamente relacionado con algunos de los problemas de c más
comunes que mencionamos anteriormente.
Si una variable no está declarada, verá esta variable de mensaje sin declarar
primero usando esta función.
Este es uno de los más comunes y, por lo general, más fácil de detectar.
Y luego también mostrará el símbolo antes
de este mensaje.
Básicamente, dirá que
estás intentando usar esta variable, pero nunca la declaraste.
Sabemos que cuando declaras una variable, especificas el tipo de datos.
No puede simplemente firmar datos en variables que no existen.
Una advertencia de declaración implícita de función, esto está relacionado con las declaraciones de función.
Es cuando intentas llamar a una función, pero si
la función no tiene ninguna implementación asociada. No incluyó el encabezado o
no lo declaró. Entonces no sabe dónde está, y
no sabe cómo se declara la función, no conoce los argumentos, no conoce el valor de retorno.
¿No tiene información sobre la función en sí?
Para resolver esto, siempre declare un prototipo de función en la parte superior.
Otra advertencia es que dirá que el control de advertencia llega al final de la función no
nula, esto sucederá cuando una función haya sido definida para devolver un resultado que no es nula, pero
no hay una declaración de retorno incluida en la función.
Entonces olvidó devolver los datos.
O la función está definida incorrectamente donde debe eliminar el tipo de datos antes
de la declaración de la función, o se olvidó de
agregar esa declaración de retorno. Uno de los otros
debe cambiarse para corregir esta advertencia.
Pero ves que esto es una advertencia. Todavía puede compilar allí, pero
hombre, eso realmente podría causar problemas de corte en su programa.
Si espera que una función devuelva algo y no lo hace, entonces desea corregir sus
advertencias, la variable no utilizada, es otra advertencia común.
El compilador imprime esto cuando se declara una variable, pero nunca se usa.
No debería declarar una variable si no la
usa, así que elimine esa declaración.
Tiendo a obtener estos bastante cuando hago algunas de mis demostraciones
porque dejo variables que nunca uso.
O cuando estaba demostrando cómo declarar una variable y luego
la compilaba para mostrarle que se compiló, recibía una advertencia que decía que nunca se usó.
Eso está bien porque estaba demostrando algo. Pero elimine sus
variables si no se están utilizando. No es necesario declarar.
Referencia indefinida a. Esto sucede en la fase de vinculación.
Así que recuerde el compilador o la fase de compilación, se compilará.
Primero, ejecutará el preprocesador, luego generará los archivos de objeto y luego tomará esos archivos
de objeto y los vinculará para crear un programa completo.
Entonces, durante la fase
de vinculación, debe resolver las dependencias externas.
O específicamente cualquier función a la que esté llamando,
debe implementarse en algún lugar.
Entonces, si no tiene ese archivo de objeto, le dará este problema.
Está intentando invocar una función, pero no tenemos el código para ello.
Por lo tanto, debe asegurarse de vincular
a este archivo.
Por lo general, el enlace
se activará para usted, pero en GCC puede hacer la opción del guión
l para agregar el archivo de enlace. Entonces, si está utilizando una función en
el archivo de encabezado matemático, pero no está vinculando al archivo de objeto matemático, obtendrá este error.
Y también sucede si ha definido el usuario y no
incluyó un archivo fuente c.
Entonces tienes múltiples archivos fuente c.
Uno de los archivos fuente de c está implementando esta función.
Otro archivo fuente c incluye el encabezado y
lo llama, pero
nunca compiló el otro archivo fuente c que tiene la implementación, verá
este error.
Así que asegúrese de traer ese archivo fuente, asegúrese de traer
cualquier archivo fuente de biblioteca estándar si lo necesita explícitamente, por lo general, no tiene que hacerlo.
Otro error común es cuando hay conflictos de tipos para.
Esto es cuando realmente ha definido o declarado un prototipo de función y luego, cuando
fue a implementarlo, no era igual a cómo lo declaró.
Entonces, por ejemplo, el prototipo tiene un tipo de resultado y un nombre entre paréntesis para los parámetros y
luego un punto y coma.
Y luego, cuando define la implementación,
tiene un encabezado de función real diferente.
Tiene un tipo de retorno diferente o tiene un número diferente de parámetros.
Y esto es decir, bueno, tienes esta
declaración de función única. Y luego, cuando lo implementas abajo, es completamente diferente.
Entonces hay un desajuste.
Y esto realmente le mostrará en la línea que el conflicto aparece
en la definición anterior que causó la contradicción.
Entonces, en la implementación suele ser donde te muestra la línea porque
generalmente declaras tus funciones en la parte superior.
Errores de tiempo de ejecución. Los errores en tiempo de ejecución son
problemas en su código que ocurren cuando ejecuta el programa, no cuando lo compila.
Entonces, estos generalmente son
bloqueos o son errores no fatales en los que
su matriz está fuera de los límites o algo así.
Es cuando el programa se está ejecutando, tienes algún tipo de error lógico.
Por lo tanto, la ejecución de programas en c puede terminar abruptamente con un bloqueo cuando se detecta un
error en tiempo de ejecución, algo que no puede manejar. Hay una corrupción de memoria,
como mencioné.
Los errores fuera de los límites suelen hacer que los programas se bloqueen.
Por lo general, lo que verá es una falla de segmentación.
Y la falla de segmentación realmente no le dice nada.
Por lo general, lo que desea hacer para diagnosticar aún más este problema es
mirar la pila de llamadas, como mencioné
antes de que el programa se bloquee, paso a paso línea
por línea para ver qué línea está causando el bloqueo.
Puede obtener la pila de llamadas si hay un archivo principal, que mencioné anteriormente.
Y luego, desde la pila de llamadas, puede ver qué línea se bloquea.
O mejor aún, ejecute el depurador, paso línea por línea y luego, cuando ejecute una línea,
depurador, verá que el programa se bloquea y puede identificarlo de esa manera.
Estos son, de nuevo, algunos consejos más
sobre errores, advertencias y mensajes del compilador y cómo interpretarlos.
De hecho, hay
enlaces en línea. O si
lo hace en Google, le dirá todos los errores y advertencias
del compilador que se pueden producir y, de hecho, le
dará una definición de por qué se produjo
y cuál fue el problema esencialmente.
Porque nuevamente, esos errores de compilación pueden ser muy crípticos.
E incluso una palabra decía
control inalcanzable. Usted sabe por esa descripción necesariamente,
a menos que haya experimentado eso, eso significa que nunca devuelve algo de una función.
Pero si lo hace, una de las mejores formas de encontrar
y solucionar problemas en su programa cuando tiene errores de compilador y no entiende
ese compilador, búsquelo en Google. Y, por lo general, lo que sucederá es que se desbordará la pila.
Y te dirá oye, este es tu error, así es como
lo resuelves. Hago eso hasta el día de hoy.
He estado programando en c durante 15 años, pero todavía hay momentos
en los que me encuentro con cosas, y me pregunto qué significa esto exactamente.
Y lo buscaré en Google, tomaré el compilador, lo pondré entre comillas y
me dirá exactamente lo que está sucediendo.
Stack Overflow es un sitio web realmente bueno.
Y realmente puede ahorrar mucho tiempo en
el proceso de depuración. No intente adivinar cuándo ve compiladores o advertencias.
Ese compilador está tratando de decirle algo y señalará exactamente lo que está sucediendo.
Entonces, si lo entiende, podrá solucionar su problema mucho, mucho más rápido.
Y si no es algo con lo que
esté familiarizado, vaya al desbordamiento de pila o vaya a un sitio web que los describa
todos y pueda descifrarlo de esa manera.
Espero que esto haya sido de ayuda. Gracias.