[C con Clase] Conseguido

Steven Davidson srd4121 en njit.edu
Mie Oct 19 16:24:18 CEST 2011


Hola Miguel,

On Wed, Oct 19, 2011 at 3:32 PM, Miguel <halowin3 en gmail.com> wrote:
> He tenido que poner la struct como global:
>
> struct bloque{
>     GtkWidget *l1;
>     GtkWidget *l2;
> };

Este tipo de dato DEBE ser global.

> struct bloque bl;
>

Pero esta variable NO DEBE ser global.

Lo que queremos evitar es que las VARIABLES sean globales, pero los
tipos de datos, prototipos (funciones), y constantes no suelen tener
ningún problema al ser globales; a veces, sí nos interesa que sean
locales o anidados en otras entidades, pero por regla general, son
globales.


Al final, tenemos un código fuente semejante a lo siguiente:

// Global
struct bloque
{
  GtkWidget *l1;
  GtkWidget *l2;
};

void clik1( GtkWidget *widget, gpointer data )
{
  struct bloque *pEtiquetas = (struct bloque *) data;

  gtk_label_set_text( GTK_LABEL( pEtiquetas->l1 ), "Me han cambiado 1" );
}

int main()
{
  struct bloque bl;
  ...
  g_signal_connect( GTK_BUTTON(boton1), "clicked", G_CALLBACK(clik1), &bl );
  ...
}


Ten presente que C se basa en que todas las entidades que vayas a usar
DEBEN ser declaradas - y posiblemente definidas - en su ámbito
correspondiente, previamente a su uso. Por esta razón, tenemos que
definir 'struct bloque' globalmente, porque la función 'clik1()'
requiere tal tipo de dato.


Espero haber aclarado el tema.

Steven




Más información sobre la lista de distribución Cconclase