variable operator from example datatype code c++ c syntax

c++ - operator - ¿Qué es FAR PASCAL?



scope c++ (7)

Me preguntaba por qué en algún código fuente existen macros como FAR y PASCAL. ¿Qué significan y hacen? Gracias


Específicamente, PASCAL dice que los argumentos de la función se pasan de izquierda a derecha, esto reduce el tamaño del código (porque la persona que llama sabe qué tan grande es la pila y, por lo tanto, puede limpiarla)

C stdcall pasa los argumentos de derecha a izquierda, esto significa que puede tener un número variable de argumentos, pero se necesita más código para aclarar.


FAR es obsoleto; se usó en un código de 16 bits para indicar los punteros que podrían abordar todo el espacio de direcciones, en lugar de un desplazamiento de 16 bits al segmento actual.

PASCAL es una convención de vocación. Como lo describe Wikipedia :

Los parámetros se insertan en la pila en orden de izquierda a derecha (frente a cdecl), y el destinatario es responsable de equilibrar la pila antes de regresar.

Esta convención de llamada era común en las siguientes API de 16 bits: OS / 2 1.x, Microsoft Windows 3.xy Borland Delphi versión 1.x.


Pasando por la memoria aquí,

FAR es un retroceso a los días de 16 bits cuando la memoria del montón se segmentó. Los datos de NEAR fueron limitados en tamaño y más rápidos, se permitió que FAR fuera más grande pero más caro.

Que yo sepa, en un terreno de 32 bits es una macro que se derrumba en nada.

PASCAL es una convención de llamadas que también se usa mucho en días de 16 bits. Desde entonces ha sido reemplazado por stdcall.

Ambos se quedan para la compatibilidad hacia atrás.


Probablemente es una codificación redundante / obsoleta que quedó de la era de 16 bits.

FAR se usó en aplicaciones de 16 bits para indicar que la dirección requería más de 16 bits.

PASCAL (alción) es un tipo de conversión, le permite al compilador saber cómo está ordenada la pila (usando las convenciones de llamada de PASCAL) para que el compilador pueda pasar los parámetros apropiados hacia y desde la función.

HTH


esta es una vieja convención de vocación ...

FAR se hereda de un momento en que el procesador se registra cuando es demasiado pequeño para contener la dirección completa de un destino de salto. por lo tanto, los procesadores tuvieron 2 tipos de salto dependiendo de qué tan lejos estaba el destino del contador del programa actual.

PASCAL describe el orden de los argumentos en la pila, dice que la función usa el orden descrito por el lenguaje de programación Pascal, que era diferente de C. (la versión muy antigua de sistemas operativos como MacOS y Windows se desarrolló utilizando Pascal).


FAR es un remanente de la era de 16 bits, cuando teníamos punteros cercanos (16 bits) y lejanos (32 bits).

PASCAL es una convención de vocación. Creo que es equivalente a stdcall hoy en día.


  • PASCAL: Está relacionado con una convención de llamadas . Los parámetros se insertan en la pila en orden de izquierda a derecha (frente a cdecl), y el destinatario es responsable de equilibrar la pila antes de regresar.

    Esta convención de llamada era común en las siguientes API de 16 bits: OS / 2 1.xy Microsoft Windows 3.x. Existe cierta controversia sobre si fue utilizado por Borland Delphi 1.x

  • FAR: en una computadora de arquitectura segmentada, un puntero lejano es un puntero que incluye un selector de segmento, lo que hace posible apuntar a direcciones fuera del segmento actual.

Para completar, FAR y PASCAL son macros preprocesadoras que, cuando se compilan para sistemas de 16 bits, se expanden a las palabras clave que eran necesarias para declarar la convención de llamada y el tamaño del puntero. En los sistemas de 32 bits, generalmente se expanden a nada (a menos que tenga una convención de llamada predeterminada extraña). Las macros se conservan para compatibilidad con versiones anteriores {hat / tip: comentario de Adrian McCarthy }