Comparación gramatical entre lenguaje C y Pascal
C y Pascal solían ser muy diferentes, pero cada vez se parecen más.
El lenguaje C moderno toma prestados muchos conceptos de Pascal:
Por ejemplo, el lenguaje C antiguo tenía una verificación de tipos débil y no tenía prototipos de funciones. Pero el lenguaje C/C actual admite prototipos de funciones (y no promueve el antiguo estilo funcional), y el mecanismo de verificación de tipos es casi tan estricto como Pascal. El antiguo lenguaje C solo podía depender de punteros para acceder a variables externas, lo cual era muy inseguro, pero los parámetros de referencia C/C actuales son bastante seguros. Los parámetros de referencia son exactamente los mismos que los parámetros var de Pascal.
Además, el lenguaje Pascal en sí también ha experimentado un tremendo desarrollo y Borland ha contribuido mucho a ello.
El Pascal que la gente usa hoy en día es casi Turbo Pascal o el Object Pascal de Delphi. N.Wirth era
nombre del programa (entrada, salida);
const a = 1;
tipo t = matriz empaquetada de caracteres
var i: entero;
comenzar
writeln('Este es un programa Pascal antiguo'); > ¿Cuántas otras personas conoces? Un software es sólo un programa que comienza y no se puede dividir en módulos. ¿No te volverías loco?
El lenguaje Pascal moderno también toma prestados muchos conceptos del lenguaje C, como valores de parámetros predeterminados y registros de variantes variables:
tipo
TPoint = registro
número entero de
0: (x, y: extendido
1: (radio, ángulo: extendido
end;
La parte del caso no es tipo de caso: entero de sino entero de caso de, que en realidad es lo mismo que unión en lenguaje C.
Sin mencionar los tipos de datos prestados (como entero pequeño, entero largo, puntero sin tipo, parámetros de tipo) y el mecanismo de conversión de tipo forzado.
El procesamiento de archivos actual en Pascal también imita en cierto modo el lenguaje C, que es completamente diferente al anterior. ¿Quién recuerda todavía las operaciones get/put del antiguo Pascal?
Hablar de tantas similitudes en realidad resalta la diferencia en aquel entonces.
El desarrollo de los lenguajes es convergente y las diferencias ( {} y start..end ) suelen ser triviales
.
Existen otras diferencias importantes hoy en día: 1. Pascal admite el anidamiento de subrutinas, pero C no. Porque uno de los objetivos de diseño de C es corresponder directamente a la estructura del lenguaje de máquina.
2. Los subprogramas de Pascal se dividen en procedimientos/funciones, mientras que C solo tiene funciones.
3. Los tipos Pascal son más estrictos. Por ejemplo, char y boolean son tipos de enumeración especiales. Sin embargo, las enumeraciones y los números enteros no son lo mismo y deben convertirse usando Ord().
Los caracteres char y enum de C se tratan como tipos enteros.
4. C admite parámetros variables void f(int x, ...), Pascal no.
5. El mecanismo del módulo de C/C es que el archivo del archivo de encabezado contiene una conexión de archivo +*.obj. La inclusión del archivo es una operación de texto y la velocidad de compilación es muy lenta.
Y Pascal es conexión unitaria, operación binaria y velocidad de compilación muy rápida (aún muy importante para desarrollar software de gran tamaño)
6. La inicialización de la estructura/matriz del lenguaje C solo necesita para dar Se puede generar un valor numérico y el número de elementos puede ser menor que el definido; mientras que Pascal debe indicar claramente el nombre del componente y el número corresponde estrictamente a:
var Punto: TPoint = ( x: 100 , y: 200);
7. Los identificadores C distinguen entre mayúsculas y minúsculas, mientras que Pascal no.
8. La función de preprocesamiento del compilador de C es más poderosa que la de Pascal y también es muy importante en la práctica (compensa muchas deficiencias del compilador de C).
9. Es fácil pasarlo por alto pero también muy importante: las expresiones de ambos son diferentes.
9.1. A las expresiones C/C se les asignan demasiadas tareas. Incluso la declaración de asignación en sí es una expresión a = b, por lo que
puedes escribir a = b =. c; en Pascal, los números de asignación se consideran estrictamente una operación prescrita: asignación, nada más. No se puede escribir a := b := c.
9.2. El tipo de expresión C/C depende estrictamente del operando fuente: char a = 100, b = 200, entonces el resultado de a b
El tipo sigue siendo char, por supuesto se desbordará.
Pascal lo expandirá "consideradamente" a un tipo de datos lo suficientemente grande para usted: var a, b: smallint; c: longint; a:= 32768; > c := a b; // El resultado es 65536, que definitivamente es 0 en lenguaje C
En el análisis final, C está cerca de la máquina y trata los operandos como "binarios" en su esencia ( esto a veces es una ventaja, especialmente cuando se trata de hardware); Pascal está cerca de las matemáticas e intenta ver los valores desde una perspectiva matemática. 10. En cuanto a qué tan poderoso es el bucle for de C y qué tan bien se comporta el bucle for de Pascal, no es demasiado importante. ==================================================== ======
Creo que la mayor diferencia es que no se permite definir otras funciones dentro de funciones en C
Sin embargo, sí se permiten en las funciones de proceso de Pascal.
Además, c usa = pascal usa: =
Además, c usa {} para indicar alcance, pero pascal usa comenzar y terminar
Con respecto al bucle for , c puede asignar libremente variables en la condición Aumentar y disminuir como
int i
for(i=0; ilt; 100; i =2)
{
}
Pero en Pascal, solo puede aumentar de 1 en 1 a la vez (no sé si esto es correcto, tal vez esté relacionado con VB, así que puedes consultarlo)
=== =================================== ================ ====
Desde una perspectiva de programación orientada a objetos, son algo diferentes.
1. Pascal no admite la herencia múltiple y solo puede ser heredada por un solo padre, mientras que c permite varios padres.
Si usa la programación de TV proporcionada por GuoBC, debe haber visto el código fuente de TV. Encontrará lo similar que es al vcl de Delphi, pero después de todo está escrito en C, usando un. mucha herencia múltiple, Delphi la reescribió más tarde.
A juzgar por el desarrollo futuro de oop, no se recomienda la herencia múltiple. Java, como Pascal, no admite tales operaciones, lo que reduce fundamentalmente la complejidad y disponibilidad de las clases. .
2. Pascal originalmente no tenía los conceptos de sobrecarga y polimorfismo. Ahora Borland ha perfeccionado a Pascal y lo ha transformado por completo.
3. Pascal todavía no tiene amigos de c. Todo lo que puede hacer es acceder a variables privadas de otras clases en la misma unidad. En la programación actual, todo el mundo debería intentar evitar el uso de amigos.
4. Todas las clases en Pascal son descendientes de TObject. De hecho, no escribes nada
aaa= class(); /p >
Sigue siendo equivalente a
aaa= class(TObject);
end
De esta manera, todos los punteros de clase se pueden convertir usando TObject. Y ya ha realizado algunas inicializaciones básicas de clases, desestructuración y sobrecarga de operadores en TObject. Esto es inferior a c.
5. Todo Pascal debe declarar explícitamente el constructor, incluso si no escribes nada en él. Y c puede estar ausente.
6. Todas las clases en Pascal se solicitan en el montón y se administran de manera uniforme, y la interoperabilidad de cada clase se realiza en el montón.
Sin embargo, c puede existir en el montón, la pila y el área de datos, de modo que las clases en diferentes áreas puedan acceder entre sí, lo que se convierte en un problema complejo que c necesita resolver
. 7. Basado en las razones anteriores.
Por ejemplo, una clase TDemo,
se puede escribir en C como
TDemo *demo= new TDemo()
; TDemo demo; // Crea entidades directamente
Pero debe estar escrito en pascal
Demostración: TDemo
Demostración: = TDemo.Create(); /p>
8. Hay otro problema, que son las cadenas.
Ahora se puede decir que la operabilidad de cadenas de Pascal es más poderosa que la de C.
Él puede hacerlo directamente, pero c no. La razón principal de esto es que c está demasiado cerca de la operación subyacente.
9. Sigue siendo una cadena
Las cadenas de Pascal se dividen en cadenas largas y cadenas cortas. Su cadena inicial [0], lo que realmente se almacena en este [0] es la longitud de. la cadena. La cadena larga tiene 4 bytes, lo que indica una cadena de longitud 4G. La corta es 1 byte, con una longitud máxima de 255, a diferencia de c, que está representada por \0.
Pascal tiene muchos beneficios. Por ejemplo, si desea obtener la longitud de una cadena, c necesita escanear toda la cadena hasta encontrar \0 antes de poder contar el tamaño. p>Pascal puede leer la longitud directamente. [0] servirá. Puede ver esta eficiencia en el código ensamblador generado después de la compilación.
Otra ventaja es que admite cadenas de varios bytes, como Unicode. Dado que es de 16 bits, habrá muchos \0 en él, que es diferente de los caracteres de
<. p>c Finaliza el conflicto de símbolos, c tiene que cambiar a \0\0 para indicar el final para poder resolverlo. Pascal no requiere ningún cambio. 10...Hay muchísimos más que no puedo recordar ahora mismo