6.3. Estructuras de campos de bits
Se pueden definir los elementos de una estructura en campos de bits actuando como variables miembro de estructura, con un número determinado de bits entre 1 y 8, (el rango de las estructuras de bits depende de la arquitectura del microprocesador y del compilador que se esté utilizando, el rango puede ser de 1 a 8, 1 a 16, 1 a 32 o 1 a 64).
Declaración del tipo de dato estructura de bits
// Declaración de una estructura de bits
struct Puertos{
unsigned Ch0: 1; // Rango 0,1
unsigned Ch1: 2; // Rango 0 a 3
unsigned Ch2: 3; // Rango 0 a 7
unsigned Ch3: 1; // Rango 0,1
};
Declaración de variables
void main(void){
data struct Puertos PU_1; // Declaración de una variable PU_1 del tipo Puertos
PU_1.Ch0 = 0; // Asignación de datos a los elementos
PU_1.Ch1 = 3;
PU_1.Ch2 = 5;
PU_1.Ch3 = 1;
...
Contenido de memoria

Contenido en memoria de la estructura de campos de bits
6.4. Uniones
Declaración de tipo de dato
union Datos{
unsigned int i; // Número entero
unsigned char c[2]; // Array de dos caracteres
}
Declaración de variables
void main(void){
data union Datos d_1; // Declaración de una variable d_1 del tipo Datos
d_1.i = 0x0405; // Asignación de un número al tipo entero
ch1 = d_1.c[0]; // Asignación a ch1 el contenido del 1 byte de la unión ( ch1=5 )
ch2 = d_1.c[1]; // Asignación a ch1 el contenido del 1 byte de la unión ( ch2=4 )
Contenido en memoria

Contenido en memoria de la unión
6.5. Definición de símbolos
Definición de símbolos
#define principio {
#define fin }
#define entero int
#define numero 10
#define limite numero*5
#define suma x+y
#define mensaje "Demasido grande \n"
main()
principio
entero x,y,z;
x = 5;
y = limite;
z = suma;
if(z>y)
printf(mensaje);
...
fin