Autor Tema: error al compilar  (Leído 3337 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado danifiguerola

  • PIC10
  • *
  • Mensajes: 24
error al compilar
« en: 10 de Agosto de 2015, 13:03:10 »
Buenas,

Estoy haciendo un programa para un pic con el XC16 con el MPLAB.  El código es el siguiente:

Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <p24FJ64GB002.h>

typedef struct estructura_planta{
char nom[10];
int duracio_etapes[4];
float Kcb[3];
float altura;
float arrels[2];
} cultiu;

struct cultiu cultius[5];

float calcul_kcb_diari(unsigned char dia_any, unsigned char x)
{
    int Lprev, Letapa;
    float Kcprev, Kcprox;


    if (dia_any<= (cultius[1].duracio_etapes[0]))
return(cultius[x].Kcb[0]);
    else
        if (dia_any<=(cultius[x].duracio_etapes[0]+cultius[x].duracio_etapes[1]))
        {
            Kcprev=cultius[x].Kcb[0];
            Kcprox=cultius[x].Kcb[1];
            Lprev=cultius[x].duracio_etapes[0];
            Letapa=cultius[x].duracio_etapes[1];
            return(Kcprev+((dia_any-Lprev)/Letapa)*(Kcprox-Kcprev));
        }
else
            if (dia_any<=(cultius[x].duracio_etapes[0]+cultius[x].duracio_etapes[1]+cultius[x].duracio_etapes[2]))
return(cultius[x].Kcb[1]);
            else
            {
                Kcprev=cultius[x].Kcb[1];
                Kcprox=cultius[x].Kcb[2];
Lprev=cultius[x].duracio_etapes[0]+cultius[x].duracio_etapes[1]+cultius[x].duracio_etapes[2];
Letapa=cultius[x].duracio_etapes[3];
return(Kcprev+((dia_any-Lprev)/Letapa)*(Kcprox-Kcprev));
            }
}





float calcul_etc (float eto)
{
    float Kcb, Ke;


    Kcb = calcul_kcb_diari();
    Ke = calcul_ke_diari();

    return(eto*(Kcb+Ke));
}




/*
 *
 */
int main(void) {








}
Aún no hace nada pero, como hace mucho tiempo que no programo en C (lo tengo todo muy olvidado) he querido compilar esta parte a ver si daba errores y me da el siguiente:

error: array type has incomplete element type

El error es en la fila donde pone:

Código: [Seleccionar]
struct cultiu cultius[5];

Lo que yo quiero hacer es un array de la estructura "cultiu" ya que tendré varios tipos de cultivos.

Me he mirado un libro que tengo de programación y allí pone que lo tengo que hacer de esta manera, por lo que no se que es lo que hago mal.

Gracias de antemano

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: error al compilar
« Respuesta #1 en: 10 de Agosto de 2015, 13:27:03 »
Sacale el struct

Ya con el typedef estas declarando que esa estructura con todo lo que contiene ahora se llama cultiu.

Luego como bien haces con los ints y demas, haces lo mismo con tu tipo

Código: C
  1. int variable[5];
  2. long variable[5];
  3. cultiu variable[5];
Creo que ese es el error.

La otra es que si es algo que no se va a modificar podes declarlos constantes y que no te consuma toda la RAM.

Caso que sea todo constante:
Código: C
  1. const cultiu variable[5] = {
  2.         {"Nombre1",{1,2,3,4},{1.0,1.1,1.2},2.4,{1.5,2.6},
  3.         {"Nombre2",{1,2,3,4},{1.0,1.1,1.2},2.4,{1.5,2.6},
  4.         {"Nombre3",{1,2,3,4},{1.0,1.1,1.2},2.4,{1.5,2.6},
  5.         {"Nombre4",{1,2,3,4},{1.0,1.1,1.2},2.4,{1.5,2.6},
  6.         {"Nombre5",{1,2,3,4},{1.0,1.1,1.2},2.4,{1.5,2.6}
  7. };

Un caso que estoy utilizando y que implemento unos menus, (codigo/idea tomado de aporte de Suky)

Código: C
  1. typedef struct AMENU MENU;
  2.  
  3. struct AMENU{
  4.     uint8_t TipoMenu;
  5.     const char *TextoMenu;
  6.     uint32_t * Menu;
  7.     void (*PtrFuncionSeleccion)(void);
  8.     const uint32_t *PtrIcono;
  9. };
  10.  
  11. const MENU MenuPrincipal[]={
  12.     {SUBMENU_ANTERIOR,"",(uint32_t *)&VistaEstado,NULL,NULL},
  13.     {MENU_SUBMENU,"Logs",(uint32_t *)&MenuLogs,NULL,NULL},
  14.     {MENU_SUBMENU,"Vista",(uint32_t *)&MenuVista,NULL,NULL},
  15.     {MENU_SUBMENU,"Configuracion",(uint32_t *)&MenuConfiguracion,NULL,NULL},
  16.     {MENU_COMANDO,"Atras",NULL,vFuncionAtras,NULL},
  17.     {MENU_FIN,"",NULL,NULL,NULL}
  18. };

Esta separado el typedef por que lo tenia que declarar antes para que no me marcara error la declaracion de un prototipo de funcion. Nada mas.
Y la aplicacion es muy parecida a la tuya. donde tenes un array de estructuras.
« Última modificación: 10 de Agosto de 2015, 13:30:10 por KILLERJC »

Desconectado danifiguerola

  • PIC10
  • *
  • Mensajes: 24
Re: error al compilar
« Respuesta #2 en: 10 de Agosto de 2015, 13:35:26 »
Hola KILLERJC

Tenías razón, sobraba el struct. :)

Si que van a ser datos constantes que no se modificarán por lo que me comentas me irá de perlas.

Muchas gracias por la ayuda

Desconectado danifiguerola

  • PIC10
  • *
  • Mensajes: 24
Re: error al compilar
« Respuesta #3 en: 20 de Agosto de 2015, 04:52:14 »
Hola de nuevo.

Una pregunta. En referencia a lo de declarar la estructura como constante para que ocupara menos RAM, tengo una duda... o varias  :)

El tema es que la mayoría de datos van a ser constantes, pero hay algunos datos asociados a la estructura que no. A ver si se explicarme. El tema es que la estructura tiene unos datos base de cada planta que no se modificaran. Estos datos son:

Código: [Seleccionar]
const cultiu cultius[15] = {
    {"Broquil",     {35,45,40,15,0,0,0,0},      {0.15,0.95,0.85},   0.3,    {0.2,0.4}},
    {"Col",         {40,60,50,15,0,0,0,0},      {0.15,0.95,0.85},   0.4,    {0.2,0.5}},
    {"Coliflor",    {35,50,40,15,0,0,0,0},      {0.15,0.95,0.85},   0.4,    {0.2,0.4}},
    {"Enciam",      {25,35,30,10,20,30,15,10},  {0.15,0.90,0.90},   0.3,    {0.2,0.3}},
    {"Ceba",        {20,35,110,45,15,25,70,40}, {0.15,0.95,0.65},   0.4,    {0.2,0.3}},
    {"Espinacs",    {20,20,25,5,20,20,15,5},    {0.15,0.95,0.85},   0.3,    {0.2,0.3}},
    {"Ceba tendre", {0,0,0,0,25,30,10,5},       {0.15,0.90,0.90},   0.3,    {0.2,0.3}},
    {"Alberginia",  {0,0,0,0,30,40,40,20},      {0.15,1.1,0.7},     0.8,    {0.2,0.7}},
    {"Pebrot",      {0,0,0,0,25,35,40,20},      {0.15,1.0,0.8},     0.7,    {0.2,0.5}},
    {"Tomaquet",    {0,0,0,0,30,40,45,30},      {0.15,1.1,0.7},     0.6,    {0.2,0.7}},
    {"Carbasso",    {0,0,0,0,25,35,25,15},      {0.15,0.9,0.7},     0.3,    {0.2,0.6}},
    {"Carabassa",   {0,0,0,0,20,30,30,20},      {0.15,0.95,0.70},   0.4,    {0.2,1.0}},
    {"Bajoca",      {0,0,0,0,20,30,30,10},      {0.15,1.0,0.8},     0.4,    {0.2,0.5}},
    {"Fabes",       {0,0,0,0,20,30,35,15},      {0.15,1.1,1.05},    0.8,    {0.2,0.5}},
    {"Pesols",      {0,0,0,0,20,30,35,15},      {0.15,1.1,1.05},    0.5,    {0.2,0.6}}
};

Además pero, hay tres datos posteriores a calcular que se asociarán a cada planta. Estos serían, si la planta se cultiva o no, un valor diario de cada planta a calcular (solo hace falta guardar el del día anterior para calcular el del día actual) y la superficie en % que ocupará cada planta.

Mi duda es si es mejor crear tres arrays de 15 posiciones para guardar estos datos variantes o ponerlos en campos de la estructura principal y no declararla como constante.

No lo tengo muy claro. Las variables const se guardan en la ROM (en mi caso seria en la Fash de programa? O no?

Si fuera así, entonces depende de la necesidad de memoria de programa tenga imagino.

En realidad, la tabla creo que es pequeña por lo que supongo que en este caso tampoco es muy importante... pero era para entender como funciona.

Muchas gracias.


Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: error al compilar
« Respuesta #4 en: 20 de Agosto de 2015, 08:20:39 »
Citar
Mi duda es si es mejor crear tres arrays de 15 posiciones para guardar estos datos variantes o ponerlos en campos de la estructura principal y no declararla como constante.

Como vos bien decis, depende de la cantidad de memoria que necesites, si aun creando el array con todos los datos te sobra RAM entonces no vas a tener problemas.
Si los valores van a cambiar pero se tienen que mantener con los valores nuevos entonces vas a tener que usar la EEPROM si o si. Intenta que el guardado a la EEPROM sea lo menos posible, ya que al igual que la flash tiene un numero limitado de escrituras.
Tu programa al inicio debera leer la EEPROM y actualizar todos los valores de ese array de estrucutras.

Lo que no se es si se puede crear una estructura con un solo campo constante, ya que nunca lo hice. Es decir:

Código: C
  1. typedef struct estructura_planta{
  2.         const char nom[10];
  3.         int duracio_etapes[4];
  4.         float Kcb[3];
  5.         float altura;
  6.         float arrels[2];
  7. } cultiu;

Citar
No lo tengo muy claro. Las variables const se guardan en la ROM (en mi caso seria en la Fash de programa? O no?

Exactamente en la flash

Desconectado danifiguerola

  • PIC10
  • *
  • Mensajes: 24
Re: error al compilar
« Respuesta #5 en: 20 de Agosto de 2015, 15:27:05 »
Ok.

Creo que crearé tres arrays para lo variable y dejaré el resto como const. Tal y como está ahora.

Mi idea és conectar al pic a una eeprom para guardar los datos que quiero conservar en el caso que fallara la alimentación o hubiera un reset por algún motivo. Tengo que añadir una eeprom porque el pic que uso no tiene (pic24fj64gb002). Creo que hay una nota de aplicación de Microchip para emular eeprom de datos en la memoria de programa. En mi caso no sería mala idea ya que son pocos los datos que tengo que guardar pero de lo momento lo voy a hacer con una eeprom externa.

Muchas gracias de nuevo

Saludos


Desconectado danifiguerola

  • PIC10
  • *
  • Mensajes: 24
Re: error al compilar
« Respuesta #6 en: 23 de Agosto de 2015, 07:23:15 »
Hola de nuevo.

Quería compartir otro problema que me a surgido y no entiendo porque. Es del mismo programa. No es el problema de antes pero para no crear otro tema lo pongo aquí (supongo que no hago mal...)

El tema es que tengo la siguiente función:

Código: [Seleccionar]
float intro_var_float(float num_max, float num_min, char text[8], float increment)
{
    unsigned char buf[5];
    float var=0;

    escriure_cmd (0x01);                    //Borrar LCD
    escriure_cmd(0x02);                     //Cursor a l'inici
    escriure_txt(text);
    sprintf (buf, "%.2f", var);
    escriure_txt (buf);
    while ((_RB4 == 0)||(var == num_min))     
    {
        if (_RA4 == 1)
        {
            if (var == num_max)
                var = 0;
            else
                var= var+increment;
       
        escriure_cmd (0x01);                    //Borrar LCD
        escriure_cmd(0x02);                     //Cursor a l'inici
        escriure_txt(text);
        sprintf (buf, "%.2f", var);
        escriure_txt (buf);
        __delay_ms(300);
        }
    }
    __delay_ms(500);                        //Elimina rebots pulsador
    return(var);
}

El tema es que tengo dos pulsadores para entrar datos de usuario. En este caso hay que entrar el caudal de los goteros y la distancia entre goteros de la misma línea y entre las columnas. Con estos datos se calcula el caudal/m2 del sistema de riego.

Como todos los valores tiene que estar dentro de un rango pongo un valor mínimo y un valor máximo. El mínimo no permite salir de la función hasta que el valor sea superior y si una vez alcanzado el máximo se pulsa el pulsador de incremento de valor (_RA4)  el valor se reinicializa a 0 i vuelta a empezar.

En el main llamo a la función

Código: [Seleccionar]
caudal = calcul_caudal_reg();

Dicha función es la siguiente

Código: [Seleccionar]
float calcul_caudal_reg ()
{
    float dist_a=0, dist_b=0, c_goter=0;
   
    escriure_cmd(0x01);                    //Borrar LCD
    escriure_cmd(0x02);                     //Cursor a l'inici
    escriure_txt("Intro caudal goter");
    while(_RB4 == 0);
    __delay_ms(500);

    c_goter = intro_var_float(5, 0, "Cau goter: ", 0.5);
    dist_a = intro_var_float(1, 0, "Dist a: ", 0.05);
    dist_b = intro_var_float(2, 0, "Dist b: ", 0.05)
    return((1/(dist_a*dist_b)*c_goter));
}

El problema que no entiendo:
       - Introduzco el valor de c_goter. Si alcanzo el valor de 5 se inicializa a 0 (bien)
       - Hago lo mismo para dist_a y dist_b y pasa de mi. O sea, alcanzo el valor de 1 en el primer caso y de 2 en el segundo, y el valor sigue aumentando sin inicializarse a 0.

No lo entiendo. Es la misma función, con variables float todas... no se porque si funciona para c-reg y no para dist_a i dist_b... :?

La única diferencia es que c-goter se incrementa 0.5 cada vez y las otras dos 0.05 cada vez... no se si está fuera de rango para comparar en una sentencia if... pero igualmente el valor de comparación es para cuando sea 1 o 2... no se, no lo entiendo.

Gracias de antemano

Desconectado danifiguerola

  • PIC10
  • *
  • Mensajes: 24
Re: error al compilar
« Respuesta #7 en: 23 de Agosto de 2015, 07:25:25 »
Si. Realmente es por el tema del incremento a 0.05. Lo he cambiado y entonces funciona. Lo que pasa es que necesito una precisión de 0.05 para las distancias.

A que se debe eso???

Desconectado gabs

  • PIC10
  • *
  • Mensajes: 3
Re: error al compilar
« Respuesta #8 en: 23 de Agosto de 2015, 11:26:48 »
En esta parte:

        if (_RA4 == 1)
        {
            if (var == num_max)
                var = 0;
            else
                var= var+increment;

Cambiá  if (var == num_max) por if (var >= num_max) y contanos si funciona.

Slds.


Desconectado danifiguerola

  • PIC10
  • *
  • Mensajes: 24
Re: error al compilar
« Respuesta #9 en: 23 de Agosto de 2015, 12:43:54 »
En esta parte:

        if (_RA4 == 1)
        {
            if (var == num_max)
                var = 0;
            else
                var= var+increment;

Cambiá  if (var == num_max) por if (var >= num_max) y contanos si funciona.

Slds.



Pues así si que funciona más o menos. Me deja subir hasta 2.05 y después vuelve a 0. Es como si no reconociera el valor de var cuando es 2... :shock:

Alguna idea porque pasa eso? No entiendo la diferencia en un float de incrementarlo 0.5 o 0.05 para este caso

Saludos y muchas gracias

Desconectado gabs

  • PIC10
  • *
  • Mensajes: 3
Re: error al compilar
« Respuesta #10 en: 23 de Agosto de 2015, 12:56:19 »
En esta parte:

        if (_RA4 == 1)
        {
            if (var == num_max)
                var = 0;
            else
                var= var+increment;

Cambiá  if (var == num_max) por if (var >= num_max) y contanos si funciona.

Slds.



Pues así si que funciona más o menos. Me deja subir hasta 2.05 y después vuelve a 0. Es como si no reconociera el valor de var cuando es 2... :shock:

Alguna idea porque pasa eso? No entiendo la diferencia en un float de incrementarlo 0.5 o 0.05 para este caso

Saludos y muchas gracias

Lo que ocurre es que a la precisión que estás trabajando, el 0.05 no debe ser exacto, sino que debe ser algo así como 0.05024 (es un ejemplo solamente), cuando vas incrementando de a 0.05024 te pasás del 2.0; por lo que si comparás con ==, no te va a dar exacto, por eso hay que usar >=. Si querés investigar esto buscá infromación del fomato IEEE para números de punto flotante.

No te quiero hacer cambiar todo el programa, pero yo trabajaría con enteros de 16bit en vez de floats. Por ejemplo escalando el 2.0 a 2000, y el 0.05 a 50. Al momento de mostrar el valor en pantalla, sencillamente depende del lugar donde pongas el punto decimal. ¿Se entiende? Así seguro vas a llegar al 2 sin pasarte.

Desconectado danifiguerola

  • PIC10
  • *
  • Mensajes: 24
Re: error al compilar
« Respuesta #11 en: 23 de Agosto de 2015, 13:11:21 »
Ok.

Me miraré lo que comentas del formato IEEE.

Lo del cambio de formato a entero me parece buena idea, pero voy muy justo de tiempo por lo que no se si podré implementarlo. Seguro pero que lo tendré en cuenta para futuros diseños.

Grácias

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: error al compilar
« Respuesta #12 en: 23 de Agosto de 2015, 18:50:37 »
Es exactamente como dice gabs, y mejor si haces todas las operaciones en enteros, es mucho mas rapido para el micro. Luego si lo queres representar en flotante lo haces.

Desconectado danifiguerola

  • PIC10
  • *
  • Mensajes: 24
Re: error al compilar
« Respuesta #13 en: 01 de Septiembre de 2015, 08:39:58 »
Hola de nuevo. Sigo con is dudas y desconocimientos... :(

Es respecto variables globales y extern. Aprovecho este mismo hilo ya que es sobre el mismo programa.

He hecho un archivo principal con el main. El programa tienen bastantes funciones y las he agrupado por tipos (las que son de entrada de datos, las de calculos, las del rtcc...) en archivos .h (no tengo claro si tiene que ser .h o .c). He creado otro archivo general con todos los prototipos (.h).

El tema, casi todas las variables las tengo declaradas como locales (en las funciones y en el main) pero tengo algunas como globales (algunas estructuras, etc..). He visto que no recomiendan el uso de variables globales pero las uso en muchas funciones que ya les paso varios parámetros, por lo cual me ha sifdo más fácil y práctico por ahora dejarlo asi.

Que mes pasa, pues que hay variables globales en el archivo principal que uso en funciones que estan en otros archivos. Evidentemente al compilar me dice que no reconoce dichas variables (no definidas).

He probado de declararlas en el archivo de las funciones pero con la estructura tengo problemas. Las variables son esas:

Código: [Seleccionar]
typedef struct estructura_planta
{
    char nom[12];
    int duracio_etapes[8];
    float Kcb[3];
    float altura;
    float arrels[2];
} cultiu;

typedef struct dades_diaries
{
    float kcb;
    float ke;
    float kc;
    float Zr;
    float AFA;
    float ks;
    float altura;
}valors_diaris;

typedef struct estructura_terra
{
    char nom[17];
    float CC;
    float PMP;
    float AFE;
} terra;

const cultiu cultius[15] = {
    {"Broquil",     {35,45,40,15,0,0,0,0},      {0.15,0.95,0.85},   0.3,    {0.2,0.4}},
    {"Col",         {40,60,50,15,0,0,0,0},      {0.15,0.95,0.85},   0.4,    {0.2,0.5}},
    {"Coliflor",    {35,50,40,15,0,0,0,0},      {0.15,0.95,0.85},   0.4,    {0.2,0.4}},
    {"Enciam",      {25,35,30,10,20,30,15,10},  {0.15,0.90,0.90},   0.3,    {0.2,0.3}},
    {"Ceba",        {20,35,110,45,15,25,70,40}, {0.15,0.95,0.65},   0.4,    {0.2,0.3}},
    {"Espinacs",    {20,20,25,5,20,20,15,5},    {0.15,0.95,0.85},   0.3,    {0.2,0.3}},
    {"Ceba tendre", {0,0,0,0,25,30,10,5},       {0.15,0.90,0.90},   0.3,    {0.2,0.3}},
    {"Alberginia",  {0,0,0,0,30,40,40,20},      {0.15,1.1,0.7},     0.8,    {0.2,0.7}},
    {"Pebrot",      {0,0,0,0,25,35,40,20},      {0.15,1.0,0.8},     0.7,    {0.2,0.5}},
    {"Tomaquet",    {0,0,0,0,30,40,45,30},      {0.15,1.1,0.7},     0.6,    {0.2,0.7}},
    {"Carbasso",    {0,0,0,0,25,35,25,15},      {0.15,0.9,0.7},     0.3,    {0.2,0.6}},
    {"Carabassa",   {0,0,0,0,20,30,30,20},      {0.15,0.95,0.70},   0.4,    {0.2,1.0}},
    {"Bajoca",      {0,0,0,0,20,30,30,10},      {0.15,1.0,0.8},     0.4,    {0.2,0.5}},
    {"Fabes",       {0,0,0,0,20,30,35,15},      {0.15,1.1,1.05},    0.8,    {0.2,0.5}},
    {"Pesols",      {0,0,0,0,20,30,35,15},      {0.15,1.1,1.05},    0.5,    {0.2,0.6}}
};

const terra terres[9] = {
    {"Arenos",          0.12,   0.045,  4.5},
    {"Arenofranca",     0.15,   0.065,  6},
    {"Franca-Arenosa",  0.23,   0.11,   8},
    {"Franca",          0.25,   0.12,   9},
    {"Franca llimosa",  0.29,   0.15,   9.5},
    {"Llimosa",         0.32,   0.17,   9.5},
    {"F-Argil-Llimosa", 0.33,   0.20,   9.5},
    {"Argilosa-Llimosa",0.36,   0.23,   10},
    {"Argilosa",        0.36,   0.22,   10},
};

const float PI=3.1415392653;

unsigned char tipus_terra[12], cultivat[15], superficie[15];

valors_diaris diari[15];

No se si és por el typedef que entonces no lo hago bien.

De momento lo que he hech es declarar las variables antes de los include y entonces si que las reconoce, pero no se si es una forma demasiado correcta de hacerlo.

He programado muy poco en C (lo hacia normalmente en ensamblador) y no controlo muy bien todo lo de los include, compilar varios archivos .c juntos...

Gracias de nuevo

Desconectado gabs

  • PIC10
  • *
  • Mensajes: 3
Re: error al compilar
« Respuesta #14 en: 05 de Septiembre de 2015, 17:48:00 »
Proba lo siguiente:

Prototipá las variables globales dentro de los archivos .c que las utilizan, así:

extern const cultiu cultius[15];
extern const terra terres[9];
extern const float PI=3.1415392653;

etcétera, etcétera... Así no hará falta declararlas antes de las directivas #include en el .c principal. Eso sí, van después.

Igual lo que estás haciendo de usar variables globales es bastante feíto. No está prohibido, pero no es recomendable.

De hecho lo que hacés de dividir el código en varios .c es correcto; pero la principal razón de esto es la reusabilidad del código. Pero cuando quieras reutilizar ese archivo .c en el futuro, a modo de librería, no te va a servir porque usa variables globales que no están declaradas en el mismo, y te vas a tener que poner a trabajar de nuevo.

Lo correcto es pasar todo como parámetro (esos parámetros normalemente van declarados en un propotitpo de la función llamada en un archivo .h que acompaña al .c; lo que se llama interfaz de la librería). Si los structs pasados son grandes (por ejemplo tablas de datos), conviene pasarlos mediante un puntero, para no cargar tanto la pila. Y si la función llamada no los tiene que modificar el puntero para pasarlos tiene que ser "a constante".

Te dejo para leer:
https://es.wikipedia.org/wiki/Variable_externa (modificador extern)
http://stackoverflow.com/a/13555817 (paso de structs por valor y referencia)
http://stackoverflow.com/a/8728992 (compilar múltiples .c, usando cabeceras .h)
http://www.learncpp.com/cpp-tutorial/610-pointers-and-const/ (punteros a constantes)

Espero sirva. Slds.

PD: Supongo que esos nombres están en catalán. Mi mamá y mis tías todavía lo hablan, y me enseñaron algunos versitos de chico.


« Última modificación: 06 de Septiembre de 2015, 08:50:57 por gabs »