Parámetros y argumentos
Los argumentos pasados a la función con su llamada son los valores iniciales de los parámetros correspondientes de la función. El número, el orden y los tipos de argumentos deben coincidir con el prototipo de la función. Sin embargo, el orden en que se calculan los argumentos no está definido (véase la sección Conceptos básicos). Dependiendo de las particularidades del código fuente y de las consideraciones en materia de optimización, el compilador puede elegir una opción que le resulte conveniente. Por ejemplo, dada una lista de dos argumentos, el compilador podría evaluar primero el segundo argumento y después, el primero. Sólo se garantiza que ambos argumentos se evalúen antes de la llamada.
Cada argumento se asigna al parámetro correspondiente de la misma manera que las variables se inicializan, con conversiones implícitas si es necesario. Antes de que se inicie la función se garantiza que todos sus parámetros tengan los valores especificados. Por ejemplo, dependiendo de los argumentos pasados, las llamadas a la función Fibo pueden provocar los siguientes efectos (descritos en los comentarios):
// warnings
|
Todas las advertencias se refieren a conversiones implícitas que el compilador realiza porque los tipos de los valores no coinciden con los tipos de los parámetros. Deben considerarse errores potenciales y eliminarse. El error «recuento incorrecto de parámetros» se produce cuando demasiados argumentos o demasiado pocos.
En teoría, un parámetro de función no tiene por qué tener un nombre, es decir, el tipo por sí solo es suficiente para describir el parámetro.argumentos o demasiado pocos. Esto suena bastante extraño porque no podremos acceder a un parámetro sin nombre dentro de la función. Sin embargo, al crear programas basados en algunas interfaces estándar, a veces hay que escribir funciones que deben corresponderse a prototipos dados. En este caso, algunos parámetros dentro de la función pueden ser innecesarios. Entonces, para indicar explícitamente este hecho, el programador puede omitir sus nombres. Por ejemplo, la API de MQL5 requiere la implementación de la función de manejo de eventos OnDeinit con el siguiente prototipo:
void OnDeinit(const int reason); |
Si no necesitamos el parámetro reason en el código de la función, podemos omitirlo en la descripción:
void OnDeinit(const int); |
La función de gestión de eventos del terminal suele ser invocada por el propio terminal, pero si necesitáramos llamar a una función similar (con un parámetro anónimo) desde nuestro código, entonces necesitaríamos pasar todos los argumentos, independientemente de si los parámetros tienen nombre o no.