Invocacion A Funciones Y Expresiones Simples PDF

Title Invocacion A Funciones Y Expresiones Simples
Author ALBERTO BERMUDEZ ORNELAS
Course Lenguajes Y Autómatas II
Institution Instituto Tecnológico de Tijuana
Pages 5
File Size 360.6 KB
File Type PDF
Total Downloads 322
Total Views 515

Summary

INSTITUTO TECNOLÓGICO DE TIJUANASUBDIRECCIÓN ACADÉMICADEPARTAMENTO DE SISTEMAS Y COMPUTACIÓNSEMESTRE ENERO-JUNIO 2020 INGENIERÍA ENSISTEMAS COMPUTACIONALESMATERIALENGUAJES Y AUTOMATAS IIDOCENTETRINIDADTEMAINVOCACION A FUNCIONES Y EXPRESIONES SIMPLESAlumno:Alberto -IntroducciónInvocación de funciones...


Description

INSTITUTO TECNOLÓGICO DE TIJUANA SUBDIRECCIÓN ACADÉMICA DEPARTAMENTO DE SISTEMAS Y COMPUTACIÓN SEMESTRE ENERO-JUNIO 2020 INGENIERÍA EN SISTEMAS COMPUTACIONALES MATERIA LENGUAJES Y AUTOMATAS II

DOCENTE TRINIDAD TEMA INVOCACION A FUNCIONES Y EXPRESIONES SIMPLES Alumno: Alberto -

Introducción Invocación de funciones (programación): Una invocación ó llamada a una función implica pasarle el control de la ejecución del programa, así como los argumentos ó parámetros que requiere para realizar su tarea, se realiza colocando el nombre de la función y los argumentos actuales en el mismo orden que los parámetros formales correspondientes. La sintaxis del lenguaje permite también la invocación de funciones a través de punteros a funciones e incluso de referencias, aunque esto último sea menos frecuente. Cuando las funciones son miembros de clases la invocación sigue una sintaxis especial. En estos casos incluso existen operadores especiales para invocarlas a través de sus punteros.

Evaluación de argumentos La gramática C++ permite utilizar expresiones como argumentos en la invocación de funciones. Estas expresiones son evaluadas, y sus posibles efectos laterales tienen efecto, antes que la función sea cargada en la pila. Sin embargo, tales prácticas son en general desaconsejadas, pues dan lugar a código difícil de leer. Ejemplo:

El orden de evaluación de los argumentos es indefinido (depende del compilador), por lo que no es recomendable utilizar expresiones que dependan del orden de evaluación de los parámetros. Ejemplo:

En estas condiciones es imposible predecir si la salida será 7 u 8.

Conversión de argumentos A continuación de la evaluación, los valores resultantes de las expresiones son convertidos automáticamente a los mismos tipos que los declarados para los parámetros formales. Ejemplo (suponiendo la definición del caso anterior):

Cuando no se ha declarado previamente un prototipo de la función, C++ realiza una invocación a la función convirtiendo la totalidad de los argumentos según las reglas de Conversiones aritméticas estándar. En cambio, si existe un prototipo de función en el ámbito, C++ convierte los argumentos al tipo declarado para los parámetros. Cuando un prototipo incluye puntos suspensivos (...), el compilador convierte todos los argumentos (si los hay) como en cualquier otro caso hasta la elipsis, después conforma todos los demás parámetros (que han sido declarados variables) según las reglas usuales para argumentos de funciones que no tienen prototipo. Si existe un prototipo, el número de argumentos debe coincidir con los declarados (a menos que existan puntos suspensivos). El tipo de los argumentos también debe coincidir, pero solo hasta el punto en que una asignación pudiera realizar legalmente una conversión (del tipo realmente pasado al tipo esperado). También existe el recurso de hacer una conversión explícita ("cast") para convertir un argumento en un tipo que sea aceptable por el prototipo (Modelado de tipos). En C++ los parámetros son pasados por valor, lo que significa que existen copias locales de los argumentos formales, estas copias son variables locales de la función invocada.

Conversión de parámetros Es posible incluir sentencias de asignación en la lista de argumentos de invocación de funciones, aunque sea una práctica desaconsejable, pues da lugar a código difícil de interpretar y en ocasiones sin mucho sentido. Por ejemplo, en C++ es válido el siguiente código que compila sin problema:

Formas de invocación de funciones La forma de efectuarse la invocación de funciones y el tratamiento de identificadores globales, son cuestiones que están relacionadas, ya que ciertas formas de llamada presuponen determinado tratamiento de los identificadores. Estos detalles tienen importancia cuando se quiere mezclar código C++ con el generado por otros lenguajes de programación, bien porque necesitemos llamar una rutina en otro lenguaje desde un programa C++, o porque desde otro lenguaje necesitemos utilizar una rutina escrita en C++. La razón es que todos los lenguajes no se comportan de la misma forma, variando ciertas cuestiones de detalle. Estos detalles se refieren concretamente a: • •

El tratamiento dado a los identificadores Convención de llamada a utilizar, que compone tres cuestiones: Limpieza de la pila; paso de parámetros, y tratamiento de los identificadores globales.

Los detalles sobre la forma de proceder en cada caso dependen de la plataforma. En la mayoría de compiladores es posible fijar ciertas directrices sobre la forma de proceder en estos casos, tanto a nivel global como a nivel particular de algunos identificadores. Los comentarios que siguen se refieren al compilador Borland C++, aunque salvando algunas cuestiones de detalle, pueden hacerse extensivos al resto de plataformas (MS Visucal C++, GNU g++, etc.)

Tratamiento de identificadores Una característica que distingue a unos compiladores (lenguajes) de otros, es el tratamiento dado a los identificadores (nombres) de los objetos; lo que se conoce como sistema de codificación de nombres ("name encoding scheme"). De este sistema depende que durante las fases intermedias de la compilación, los identificadores sean guardados tal como los escribe el programador o sufran mutaciones más o menos importantes. En C++, cuando está activada la opción -u (lo que ocurre por defecto), el compilador guarda todos los identificadores globales en su grafía original (mayúsculas, minúsculas o mixta), añadiendo automáticamente un guión bajo "_" ("Underscore" ASCII 95) delante de cualquier identificador global, ya sea de función (todas lo son), o de variable. Para modificar este comportamiento se puede utilizar la opción -u- como parámetro en la línea de comando del compilador. En el caso de identificadores que han sido modificados con el identificador Pascal, no se añade ningún guión, pero el identificador es convertido a mayúsculas

Referencias: • COHEN, DANIEL I.A. “Introduction to Computer Theory”, Second Edition, John Wiley & Sons, Inc. 1997. • AUGUSTO, JUAN CARLOS. “Fundamentos de Ciencias de la Computación” – Notas de Curso. Universidad Nacional del Sur, Argentina. 2002. • CHRISTOS H. [A[ADOMITIROU. Computational Complexity. Addison–Wesley (1994) • V.R. PRATT. “Every Prime has a succinct certificate”. SIAM J. on Comput. 4 (1975) 214– 220. • HOPCROFT, JOHN E., MOTWANI, RAJEEY ULLMAN, JEFFREY D. “Introducción a la Teoría de Autómatas, Lenguajes y Computación”. Segunda Edición. AddisonWesley. 2002....


Similar Free PDFs