Args de Programa
Esta lecci贸n atiende a los siguientes objetivos:
- Entender el almacenamiento en memoria de los diferentes tipos de datos
- Entender el paso de argumentos en la l铆nea de orden
- Consolidar la idea de programa multisource en C
- Repasar formateo de la salida est谩ndar con printf() y fprintf()
- Presentar el uso b谩sico de los punteros en C
Almacenamiento de los tipos datos. Volcado (dump) de un 谩rea de memoria¶
La figura siguiente muestra un bloque de celdas de memoria consecutivas cuyas direcciones, en hexadecimal, corresponden al intervalo [0x90000000, 0x90000011]. Est谩 谩rea de memoria almacena cuatro variables:
- iii de tipo int con el valor decimal 255
- sss de tipo short con el valor decimal -1
- ddd de tipo double 0x001fffffffffffff (1.4916681462400412e-154)
- ptr de tipo int* (es una direcci贸n)

Operador sizeof()¶
- Es un operador unario (no una funci贸n) que se resuelve en tiempo de compilaci贸n
- Es decir, instruye al compilador para calcular el tama帽o en bytes de una variable o tipo de dato antes de que el programa se ejecute
- Devuelve un resultado de tipo
size_tque es normalmente un tipo entero
sizeof.c#include <stdio.h> #include <float.h> int main() { char carr[3] = {'a', 'b', 'c'}; int iarr[3] = {1, 2, 3}; printf("Memoria requerida (bytes) por el tipo char : %d \n", (int) sizeof(char)); printf("Memoria requerida (bytes) por el tipo int : %d \n", (int) sizeof(int)); printf("Memoria requerida (bytes) por el tipo float : %d \n", (int) sizeof(float)); printf("M铆nimo valor float positivo: %E\n", FLT_MIN ); printf("M谩ximo valor float positivo: %E\n", FLT_MAX ); printf("Precisi贸n: %d\n", FLT_DIG ); printf("Memoria requerida (bytes) por carr : %d \n", (int) sizeof(carr)); printf("Memoria requerida (bytes) iarr : %d (OJO!!) \n", (int) sizeof(iarr)); return 0; }
Argumentos de main¶
La funci贸n main admite hasta tres argumentos:
- argc: un valor entero que determina el n煤mero de argumentos
- argv[]: un array de punteros (direcciones de memoria)
- env_var_ptr: una doble indirecci贸n (puntero a otro puntero)
Cabecera de main
int main (int argc, char *argv[], char **env_var_ptr)
Ejemplo de invocaci贸n de programa¶
./name_box Cranston Q. Snort
C贸digo de ejemplo¶
A) Versi贸n b谩sica (sin env_var_ptr)¶
El siguiente c贸digo muestra en pantalla los argumentos con los que se ha invocado al programa
#include <stdio.h>
#define OK 0
#define KO -1
int main (int argc, char *argv[]) {
int i=0;
printf("\nEl n潞 de argumentos de cmdlineV0 es %d", argc);
/* El primer elemento del array de argumentos es el nombre del ejecutable */
printf("\nnombre (arg0) = %s", argv[0]);
/* El bucle muestra el resto de argumentos */
for (i=1; i < argc; i++) {
printf("\narg%d = %s", i, argv[i]);
}
printf("\n");
return OK;
}
B) Versi贸n con env_var_ptr¶
En este caso se muestra adem谩s el valor las variables de entorno
#include <stdio.h>
#define OK 0
#define KO -1
/*
* Exacto al ej. anterior pero mostrando las variables del entorno
*/
int main (int argc, char *argv[], char **env_var_ptr) {
int i=0;
printf("\nEl n潞 de argumentos de cmdlineV0 es %d", argc);
/* El primer elemento del array de argumentos es el nombre del ejecutable */
printf("\nnombre (arg0) = %s", argv[0]);
/* El bucle muestra el resto de argumentos */
for (i=1; i< argc; i++) {
printf("\narg%d = %s", i, argv[i]);
}
printf("\n\n=============\n");
/* Mostrar variables de entorno */
printf("\nVars entorno:\n");
i=0;
while (*env_var_ptr != NULL) {
i++;
printf ("\nVar_Entorno%d => %s", i, *(env_var_ptr++));
}
printf("\n");
return OK;
}
Laboratorio
Lectura recomendada