Hola y bienvenido de nuevo.
En esta conferencia, quiero hablar sobre la definición de funciones en c.
Definición de una función.
Conocemos la importancia de las funciones.
Entendemos las ventajas.
Vamos a querer usar funciones en nuestros programas.
Entonces, cuando creas una función profesional en c, debe especificar el encabezado de la
función como la primera línea de la definición de la función.
Vamos a hablar de definir una función, y también vamos a
hablar sobre la implementación de una función.
Implementando una función es solo resolución de problemas,
es solo código c normal.
Definir una función es decir que la función existe.
Entonces, cuando define una función, el Lo primero que haces es tener
ese encabezado de función y luego sigues eso con una llave que inicia el código de
bloque para la función.
Así que es como cuando usas un corchete en
una declaración if, al igual que cuando usa un corchete en un bucle for, excepto que se
requiere la llave para las funciones.
No hay forma de eliminarlo.
Y siempre significa el comienzo del código para esa función.
Cualquier cosa entre el comienzo y la llave final es el código
de la función.
Es a donde vas para implementar la tarea.
Entonces, entre los frenos está llamado el cuerpo de la función y la primera línea de
la función se llama el encabezado de la función.
El encabezado de la función define el nombre de la función, los
parámetros de la función.
Vamos a hablar de parámetros y argumentos en detalle.
Pero ahora mismo, solo Necesito saber que hay
algo llamado parámetros.
Y el parámetro va a especificar el número y los tipos de
valores cómo puede pasar datos, parámetros tienen que ver con el paso de datos.
El tipo para el valor que la función devuelve.
Mencionamos que las funciones podemos devolver datos.
Entonces, en ese encabezado de función, vas a
tener el nombre de la función, los datos que que puede tomar puede ser aceptado por la
función y los datos que es devuelto por la función.
No nos vamos a enfocar ahora mismo sobre los datos que se pueden pasar o los
datos devueltos, solo vamos a hablar sobre la creación de una función simple.
El cuerpo de la función contiene solo código normal, y ese código se
ejecuta cuando llamar o invocar la función.
Y el propio cuerpo funcional tendrá acceso a los valores que se
pasen como argumentos.
Entonces, los datos que le pasas , puede utilizar esos datos
dentro del cuerpo de la función.
Lo que parece es este, el encabezado de la función.
El encabezado de la función tiene la primera palabra.
Y el encabezado de la función es un palabra clave que representa el tipo
de datos que serán devuelto de la función.
La siguiente palabra clave es El nombre de la función.
Y luego tienes un paréntesis izquierdo y luego tienes los parámetros separados por comas,
esos serán los datos que se pasa a la función.
Y luego tienes eso paréntesis a la derecha para
finalizar el encabezado de la función.
Entonces tienes la llave rizada que significa el inicio de la
implementación de la función.
Y tienes cualquier número de declaraciones para hacer una tarea.
Como dije, quieres haz que tus funciones sean pequeñas.
Quieren ser cohesivos.
Ellos no quieren ser por todo el lugar.
Quieren tener un solo concentrarse, hacer algo específico.
Como dije si tienes una función que recibe entrada, lee entrada.
No imprime la salida.
No hace ninguna clasificación o no hace nada más.
Si tiene una función llamada sort, ordena los datos.
No recibe entrada.
Las funciones deben ser cohesivo y pequeño.
Es mucho más fácil depurar esos funciones, así que conviértalos en cohesivos.
Y entonces tienes ese derecho llave, que finaliza la
implementación de la función.
Eso es lo que una función parece en c.
Ahora centrémonos en la función nombres, y hablaremos de los parámetros y
tipos de retorno más adelante.
La primera línea de la función nuevamente La definición le dice al compilador en
orden de izquierda a derecha tres cosas sobre la función, como mencioné.
El tipo de valor devuelve, el nombre de la función y luego
cualquier dato que tome.
Esto es solo para resumir, eso es importante.
En cuanto a los nombres de las funciones, desea para elegir nombres de funciones significativos.
Es tan importante como elegir nombres de variables significativos.
Afecta enormemente a la legibilidad del programa, así que
no nombre funciones x o y.
Nombra la función basada sobre lo que va a hacer.
Si es sumando dos números, asígnele el nombre.
Si está restando dos números, nómbrelo restar.
En este ejemplo, aquí está nuestra simple función.
No te preocupes por el vacío solo preocúpate por el nombre aquí.
Tenemos una funcion mensaje de impresión con nombre.
Y luego vemos esa llave rizada que
significa el inicio de la función, y luego tenemos alguna implementación.
Y esta implementación no hace nada más
que mostrar una cadena, un texto.
Y luego tenemos eso corsé derecho.
Así que esta es una función muy simple no hace mucho, muestra la salida.
En este ejemplo para la impresión mensaje, la primera línea
del mensaje de impresión le dice al compilador que la función no devuelve ningún valor.
Esa es la palabra clave vacía.
Una vez más, no es necesario que se concentre en eso, pero eso es lo que está haciendo.
El siguiente es el nombre.
Y luego, después de que el nombre es argumentos, se llaman parámetros.
Y usamos la palabra clave void nuevamente si no estamos pasando ningún dato.
La declaración en la función el cuerpo puede estar ausente, pero los
tirantes siempre deben estar presentes.
Por lo tanto, no es necesario que tenga implementación, pero debe tener las llaves
para que una función esté allí.
Si no hay declaraciones en el cuerpo de una función, el tipo
de retorno debe ser nulo.
Y de nuevo, nos centraremos en esto más tarde. y la función no hará
nada porque no tiene implementación.
Si define una función con un cuerpo vacío, aún puede ser
útil aunque sea no lograr nada.
Suele hacer eso durante el fase de prueba de un programa muy grande.
Y lo que esto te permite hacer es que puede ejecutar el programa
con solo ciertas funciones en realidad hacer algo, te ayuda a realizar
mejores pruebas, te ayuda a aislar errores.
Incluso podrías tener implementación en la prueba en el cuerpo
de la función, pero solo comente.
Y luego puedes hacer esto enfoque de dividir y conquistar.
A medida que prueba más y más y más, puede comenzar a poner la implementación
en los cuerpos de las funciones.
Es un paso a paso proceso de trabajo.
Trabajas constantemente en pequeños fragmentos, agregar código, probar ese código y luego pasar al siguiente paso
y luego, finalmente, se completará toda la implementación
y todas las funciones serán implementadas.
Entonces hay un caso de uso para tener un cuerpo de
función que no tiene código o comentado.
Funciones de nomenclatura.
El nombre de una función puede ser cualquier nombre legal.
Como cuando estas nombrando una variable, no
puede usar palabras reservadas.
Estas son palabras clave en el lenguaje como enter doubles
porque representan tipos de datos.
Sizeof es un operador.
Quieres poder para usarlo o si.
Tampoco podrías tener dos funciones con el mismo nombre.
Y esto también se refiere como una sobrecarga de funciones, algo así.
Pero no puedes tener dos funciones con el mismo nombre, la sobrecarga no se
admite en c.
Por último, puede tener el mismo name como una función que está en la
función de biblioteca estándar.
Técnicamente, si no incluye esa biblioteca incluye el archivo de encabezado, es posible
que pueda tenerlo.
Pero si alguna vez quisiste usar esa función de biblioteca, el compilador se
quejaría y diría que tienes dos funciones con el mismo nombre.
Así que no nombre sus funciones como lo mismo que las funciones de biblioteca estándar.
Un nombre legal es el mismo que una variable, una secuencia de
letras y dígitos para empezar.
El primer carácter tiene que ser una letra y la letra puede ser un guión bajo.
No puedes iniciar funciones con números o cualquier tipo de
personajes extraños.
El nombre que elijas debe ser significativo y relevante para lo
que hace la función.
Ya dije esto, lo estoy repitiendo Para enfatizarlo, los nombres significativos
son muy importantes.
A menudo definirás la función también nombres y nombres de variables que constan
de más de una palabra.
Entonces ahora quiero hablar un poco un poco sobre el estilo de codificación.
Probablemente te hayas dado cuenta cuando he Escribí mi código que uso camel case.
Hay tres formas diferentes puede escribir los nombres de
sus variables y funciones.
Puedes separar cada una de las palabras en un nombre de función
con un carácter subrayado, es un enfoque.
Puede poner en mayúscula la primera letra de cada palabra o
puede poner en mayúscula las palabras después de la primera palabra, y todavía tienen rasgueo juntos.
Recuerda, no puedes tener espacios en el medio.
Este es solo un enfoque para nombrar porque
es importante que sigas alguna convención para que sea más fácil de leer.
Solo tengo una palabra larga con cinco palabras diferentes.
Entonces, si tuvieras una función que diga compruebe si hay una entrada válida, no
querrá tenerlos todos en minúsculas.
Sería muy difícil de leer y identificar dónde estaban las palabras.
Así que el caso del camello es una forma de identificar dónde están las palabras en
muchas palabras y es fácil de ver qué está haciendo esa función.
Un guión bajo es otro forma de separar palabras.
Y capitalizando la primera letra de cada palabra es otra forma de separar.
Es importante poder separe las palabras en una función para
hacerla más legible.
Yo suelo usar estuche de camello.
Y cuando usas uno de estos convenciones, quieres usarlo para
todo, quieres usar para nombrar variables, desea usarlo para los
nombres de sus funciones.
Por lo general, solo sigue esto convención de codificación común, hace que las
cosas sean más legibles.
Prototipos de funciones.
Hablamos de definir una función.
¿Qué hay de declarar una función?
Puedes decir por qué necesitas declare una función, ¿no la está
declarando cuando la define?
Pero también hay un concepto de declarar una función.
Y es necesario si quieres para usar la función antes de que se implemente,
antes de que se defina.
Entonces, un prototipo de función es un declaración que define una función.
Le dice al compilador esencialmente todos los detalles de la función.
Define su nombre, tipo de retorno y el tipo de cada uno de sus parámetros.
Entonces parece un encabezado de función.
Proporciona todo el externo especificaciones de la función, principalmente
probablemente también haya escuchado el término firma, firma de función eso
es lo que es.
Está especificando los datos devueltos, los datos que toma
y todo sobre la función en sí.
Quieres escribir un prototipo de función de la misma manera que escribe el encabezado de la
función, la única diferencia es que pones un punto y coma al final.
Y esto es solo declarando la función.
Esto está diciendo que la función existe.
Un prototipo de función permite el compilador para generar las instrucciones
apropiadas en cada punto donde llamas a la función.
También comprueba que está utilizando el funcionar correctamente en cada invocación.
La razón por la que proporcionas función encabezados es para que pueda invocar la función sin una
advertencia o un declaración de función sin que se implemente, por lo que en realidad es solo el orden
de su código y le daré un ejemplo de
esto en un segundo.
Cuando incluye un encabezado estándar en un programa, el archivo de
encabezado agrega el prototipo de función.
Los prototipos de funciones suelen ir en archivos de encabezado si desea reutilizarlos en muchos
archivos de origen diferentes.
Si solo los usa en una sola archivo de origen, puede colocarlos en
la parte superior del archivo de origen.
Pero como estamos usando printf función que se puede utilizar en muchos
archivos fuente diferentes, ese encabezado La función se definirá en el encabezado o en
la declaración de esa función. se definirá en el encabezado.
Y en este caso, stdio. h.
Por eso suelen aparecer en archivos de origen si solo ese archivo de origen
está utilizando esa función.
De lo contrario, póngalos en un archivo de encabezado si
están siendo reutilizados por muchos archivos de origen.
Permite cualquiera de las funciones en el archivo para llamar a cualquiera de esas
funciones que están definidas independientemente de dónde ha colocado la implementación.
Si coloca la implementación de una función, después de llamarla, c se va
a quejar y decir que no lo sabe.
Porque cuando compilas, está compilando línea por línea.
Si coloca la declaración en la parte superior, puede invocar la función
antes de que se defina, antes de que se implemente.
Los nombres de los parámetros no tienen que ser los mismo utilizado en la definición de función.
Puedes tener diferentes nombres.
Cuando digo nombres, esos son los identificadores de los datos.
Puede cambiar el nombre del parámetros en el prototipo de función.
Todavía tienes que tener los mismos datos tipos, pero puede cambiar los nombres.
Siempre es una buena práctica incluir declaraciones de función para
todas las funciones en su programa en la parte superior del archivo.
Mantiene su programa más consistente al diseño y evita que se produzcan
errores en cualquier etapa si alguna vez desea llamar a esa
función antes de implementarla.
He aquí un ejemplo de algunos prototipos de funciones.
En lo más alto de la archivo, tenemos nuestro archivo incluye.
Y luego tenemos algunos funciones que hemos declarado, promediar,
sumar y obtener datos.
Te das cuenta de que se ve solo como un encabezado de función.
Tiene el tipo de retorno, tiene los parámetros que están
definidos en la función, pero tiene un punto y coma al final.
No hay implementación para estas funciones.
Le estás diciendo al compilador esta es la función existe y así
es como se define.
Lo que esto te permite hacer es ahora en su función principal,
podría llamar al promedio, podría llamar la suma, puede llamar para obtener datos.
Y las implementaciones reales pueden estar debajo de donde los llamas.
Si no tuvieras la función encabezados aquí, cuando
intentaste llamarlos en el principal, si eran definido debajo de la rutina principal,
tendría errores o advertencias.
Así que echemos un vistazo en eso en bloques de código.
Aquí tenemos nuestra rutina principal habitual.
Ahora digamos que queremos para crear una función o queremos invocar una
función.
Vamos a invocar un función llamada agregar y no va
a tomar ningún parámetro.
Lo estamos llamando en nuestro función principal en la línea 7.
Iremos a impleméntelo en la línea 10.
Vamos a decir vacío, agregar y ni siquiera vamos a hacer nada.
Solo lo mantendremos vacío.
Cuando vayamos a compilar esto, ¿qué notará que este compilador solo
da una advertencia.
Dice agregar tiene un declaración implícita.
Puedes deshacerte de esa advertencia mediante el uso de una declaración de función.
Puedes declarar la función arriba básicamente diciéndole al compilador que vas a úselo en
algún lugar, pero no sabe dónde
está la implementación.
Entonces, lo que puedes hacer es diga vacío, agregue aquí y simplemente
agregue el punto y coma.
Ahora se deshará de eso advertencia y algunas compilaciones en realidad le
darán un error.
Ahora, cuando lo compilo, tengo sin advertencias ni errores.
Entonces eso es lo que es una función la declaración lo hace.
Te permite poner la función en cualquier lugar.
Ahora si no tuvieras la función declaración en la parte superior y tenía
la implementación arriba donde usted lo estaba llamando, entonces tampoco verá el error
porque el compilador va a conocer la función antes de
que realmente intente invocarla.
Entonces, si construimos esto, también voy a ver que no hay error.
Ahora mencioné que usualmente desea declarar todas sus funciones en
la parte superior solo por una buena práctica y creo que necesitas hacer eso.
Así que sigue haciendo eso.
Pero si sales de eso hábito, tienes que declarar tus
funciones antes de llamarlas o tienes que proporcionar
prototipos de funciones porque no quieres advertencias o errores en su programa.
Así es como puede definir un función, y así es como puede
utilizar prototipos de funciones.
En la próxima lección,
hablaremos de parámetros.
Cómo puede pasar datos a una función.
Gracias.