Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
void main(void) {
printf("Hola mundo!!\n");
}
main.c main.obj
int aux1,aux2; … prog.exe
… MOVE R3,(aux1)
aux2 = fun1(aux1); compilador CALL fun1 …
… … MOVE R3,2388
CALL 1547
…
linker …
auxiliares.c auxiliares.obj …
… … 1547 [inicio fun1]
int fun1(int x) fun1: …
compilador 2388 [valor de aux1]
{ …
… …
}
main.c main.i
#define TAM 5 int a[5];
int a[TAM]; for(int i=0;i<5;i++)
preprocesador {......} compilador
for(int i=0;i<TAM;i++)
{......}
– Observación:
• No existe el tipo boolean: resultado entero
– false: 0
– true: !0
• a = b no es lo mismo que a == b.
– Observación:
• Expresiones con operadores lógicos pueden ser corto
circuitadas (algunos compiladores).
Por ejemplo: si x < 0 es falso, toda la expresión será falsa.
• Ejemplo
– (5 || !(3)) && 6 = 1
– (5 | ~(3)) & 6 = 4
• Conversión de tipos: “casting”
– Ejemplo:
double d = 4.3; // sigue: x = …
float f = (float)d;
y = (x<0) ? x : 10
– Observaciones:
• global siempre son static.
• local puede ser auto (por omisión) o static.
funciones.c
extern int global;
int fun2(){ extern: accede a variable
return global++;
global de otro archivo
}
int ai2[TAM];
ai2[0] = 1;
main.c main.obj
int aux1,aux2; … prog.exe
… MOVE R3,(aux1)
aux2 = fun1(aux1); compilador CALL fun1 …
… … MOVE R3,2388
CALL 1547
…
linker …
auxiliares.c auxiliares.obj …
… … 1547 [inicio fun1]
int fun1(int x) fun1: …
compilador 2388 [valor de aux]
{ …
… …
}
main.c
extern int global;
#include “funciones.h”
int fun1();
main(){
int i = global+2;
i = fun1();
sustitución de etiqueta
}
0x0000F9 i 11.0
0x000000
• Tipos enumerados
typedef enum
{ROJO = 1,
VERDE = 2,
AZUL = 3,
} colores;
typedef struct {
unsigned char tipo;
union {
int entero;
float flotante;
} contenido;
} numero; 0x0000F9 contenido
numero n;
//...
if (n.tipo == ENTERO)
n.contenido = 1;
0x000000
else
n.contenido = 1.0;