Disponible la nueva versión "donationware" 7.3 de OrganiZATOR
Descubre un nuevo concepto en el manejo de la información.
La mejor ayuda para sobrevivir en la moderna jungla de datos la tienes aquí.

Curso C++

[Home]  [Inicio]  [Índice]


4.1.9  Modificadores auxiliares

§1 Sinopsis

Además de los especificadores de tipo de almacenamiento, en las declaraciones se pueden usar ciertos modificadores auxiliares para modificar ciertos aspectos de las variables y/o las funciones. Su efecto es variado, dependiendo del modificador y del elemento sobre el que se aplique (variable o función). Son los que se resumen en la tabla adjunta:

Modificador Se usa con: Descripción
const Variables Previene cambios en el objeto .
volatile Variables Previene de posible colocación en el registro y alguna optimización. Avisa al compilador que el objeto puede sufrir cambios por dispositivos externos al programa .
__cdecl Funciones Fuerza paso de argumentos según las convenciones C. Afecta al enlazado y a los nombres de enlazado ( 4.4.6a).
__cdecl Variables Fuerza discriminación mayúsculas/minúsculas para identificadores globales y guiones bajos ("underscore") iniciales en C.
__pascal Funciones Fuerza paso de argumentos según las convenciones Pascal.  Afecta al enlazado y a los nombres de enlazado.
__pascal Variables Fuerza discriminación mayúsculas/minúsculas para identificadores globales sin guiones bajos iniciales en C.
__import Funciones/clases Señala al compilador que funciones o clases debe importar.
__export Funciones/clases Señala al compilador que funciones o clases debe exportar.
__declspec(dllimport) Funciones/clases Señala al compilador que funciones o clases debe importar. Este es el método aconsejado. Aplicado sobre una función hace que la función sea accesible desde Windows [1].
__declspec(dllexport) Funciones/clases Señala al compilador que funciones o clases debe exportar. Este es el método aconsejado.  Aplicado a una función la hace exportable desde Windows [1].
__fastcall Funciones Fuerza al enlazador a la convención de paso de parámetros de registro. Afecta al enlazador y nombres de tiempo de enlazado.

Las funciones declaradas con este modificador tienen nombres diferentes que las correspondientes sin dicho modificador; el compilador antepone un @ al nombre de la función y este prefijo se aplica tanto a los nombres de funciones de C "no planchados" como a los "planchados" de C++ ( 1.4.2).

__stdcall Funciones Fuerza el paso de parámetros según la convención estándar de Windows-32.
§2  Convenciones para llamadas a/desde otros lenguajes

C++ permite fácilmente llamar a rutinas escritas en otros lenguajes y viceversa, pero cuando se mezclan lenguajes, deben considerarse dos cuestiones importantes: el tratamiento de Identificadores y la convención utilizada para las llamadas a funciones, en especial lo relativo al paso de parámetros, dado que no todos los lenguajes siguen el mismo criterio respecto a estos puntos.

Para facilitar esta interacción entre lenguajes, algunos compiladores ofrecen modificadores auxiliares específicos, que modifican el tratamiento que dan a las variables globales y a las llamadas a función. C++ Builder es especialmente rico en posibilidades a este respecto. El tratamiento puede realizarse a nivel de entidades individuales (variables o funciones) o a nivel global, para todo el programa (4.4.6a).

§3  const

La palabra clave const se utiliza para hacer que un identificador no pueda ser modificado a lo largo del programa (sea constante) y opcionalmente, para asignarle un valor inicial.

El apellido const se puede aplicar a cualquier objeto de cualquier tipo, dando lugar a un nuevo tipo con idénticas propiedades que el original pero que no puede ser cambiado después de su inicialización. Generalmente esto implica que la inicialización debe hacerse en el mismo acto de declaración de const. Ejemplo:

const float pi = 3.14;       // una constante float
const maxint = 12345;        // una constante int


Ver una completa descripción y ejemplos de esta palabra clave:  3.2.1c const.

  El atributo const puede ser reversible. C++ dispone de un operador específico que puede poner o quitar este atributo de un objeto ( 4.9.9a operador const_cast).

§4  volatile

La palabra volatile es un modificador para advertir al compilador que una variable puede ser modificada por una rutina en segundo plano (background), por una rutina de interrupción, o por un dispositivo de entrada salida.

La declaración de un objeto con este atributo, previene al compilador de hacer ninguna asunción sobre el valor del objeto mientras se ejecutan instrucciones en las que esté involucrado, dado que supone que dicho valor puede ser cambiado en cualquier momento. También previene al compilador de que no debe hacer de dicho objeto una variable de registro.

Ejemplo:

volatile int ticks;

Ver una completa descripción y ejemplo de esta palabra clave: 3.2.1d  volatile

  El atributo volatile puede ser reversible. C++ dispone de un operador específico que puede poner o quitar este atributo de un objeto ( 4.9.9a operador const_cast).

  Inicio.


[1]  Los modificadores __declspec(dllexport) y __declspec(dllimport) se utilizan en ejecutables (en caso de no utilizar "smart callbacks") y en DLLs.