filminas C
programación C
75.40 - Algoritmos y Programación I
Cátedra Wachenchauzer
Sebastián Santisi
15/06/2015
Python versus C
●
Aprendemos un segundo lenguaje en base
a las diferencias con el primero
Python
●
Dennis M. Ritchie,
1972
C
●
Guido van Rossum,
1991
●
Mainframes
●
PCs
●
Bajo nivel
●
Alto nivel
●
●
Pensado para
escribir un sistema
operativo
ANSI-89,ANSI-99
●
●
Pensado para
scripting
Todavía en
desarrollo
Caracterización
●
Interpretado vs. compilado
●
Tipado estático vs. tipado dinámico
●
Memoria administrada por el entorno vs.
por el usuario
Intérprete
●
Es un programa compilado para una plataforma
●
Ejecuta línea a línea un código (script)
●
Estereotipos:
–
Más lento
–
Lenguaje interpretado
–
Los errores saltan entiempo de ejecución
–
No optimiza
–
etc.
Compilador
●
●
●
Es un programa con una plataforma como objetivo
Toma un código fuente y genera un ejecutable
para esa plataforma
Estereotipos:
–
Más rápido
–
Lenguaje compilado
–
Control de errores en tiempo de compilación
–
etc.
Tipado dinámico
a = “hola”
...
a = 5
...
a = a ** 100
Tipado estático
int a;
a = 5;
a = 3.14; // Guarda 3
a =“hola”; // ¡ERROR!, a es
entero
Memoria administrada por el
entorno
a = “hola” + “mundo” + “.”
●
●
●
En Python la línea anterior creó en memoria
los objetos str(“hola”), str(“mundo”) y str(“.”)...
y también str(“holamundo”) y str(“holamundo.”)
En a sólo se almacenó str(“holamundo.”) los
otros 4 pueden ser destruídos
El entorno decidirá cuándo destruirlos (tal vez
no pueda, en caso de que otravariable
referencie a alguna de esas cadenas)
Memoria administrada por el
programador
●
Es el programador el que define cuándo crear, cuándo
destruir, cuánto ocupa una variable, etc.
Generalmente los tipos simples pueden operarse sin
manejar memoria salvo para almacenarlos
int a=4, b=3, c=6, d;
●
d = a + b + c + 5
●
●
En Python la suma parcial necesita ser administrada,
en C sólo ocupanmemoria a, b, c y d
La memoria se distingue en estática (pila de la función)
y dinámica (heap, peticionada al sistema operativo)
Tipos en C
●
●
●
Dos grandes grupos:
–
Enteros: char, short, int, long, etc.
–
Flotantes: float, double, etc.
Enteros:
–
El tamaño depende de la plataforma y del compilador
–
Admiten modificadores unsigned
Flotantes:
–
IEEE754
–
Representación en mantisa másexponente
–
float: ~8 dígitos de representación de mantisa en decimal
–
double: ~16 dígitos
Tipos enteros (ej. GCC 32bits)
●
●
Tipo
Bits
Bytes
Desde
Hasta
signed char
8
1
-128
127
unsigned char
8
1
0
255
short
16
2
-32.768
32.767
unsigned short
16
2
0
65.535
int
32
4
-2.147.483.648
2.147.483.647
unsigned int
32
4
0
4.294.967.295
long
32
4-2.147.483.648
2.147.483.647
unsigned long
32
4
0
4.294.967.295
El tamaño no está fijado por el estándar salvo el de char: sizeof(char) = 1
Después: sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long), etc.
Ejemplos
●
double frecuencia_angular;
●
unsigned int cantidad_asistentes;
●
unsigned char edad;
●
long centavos;
●
float temperatura;
●
Lo anterior son ejemplos de“declaraciones” de
variables. Declarar una variable implica reservar
memoria para ella. Las variables se declaran una
única vez. Declarar ≠ definir (asignarle un valor)
Literales
●
Los literales, como todo, son tipados en C
Todos estos representan al 0 con un tipo
distinto:
0 (int), 0U (unsigned int), 0L
(long), '\0' (char), NULL (void*),
0.0 (double), 0.0F (float)
●
●
Internamente pueden tener unarepresentación diferente
Funciones
●
Tienen tipos, como todo, tanto de las cosas que
entran como de las que devuelven
int sumar(int a, int b) {
return a + b;
}
int x;
x = sumar(4.8, 5.8); // x = 9
Conversiones de tipos
●
●
●
●
●
Truncado: Cuando un tipo “más grande” se mete en uno “más
chico” (un int en un char, un float en un int, un signado en un
unsigned, etc.). Puede haber pérdida de...
Regístrate para leer el documento completo.