rendered paste body// so.c// gcc -Wall `pkg-config --libs --cflags glib-2.0 gobject-2.0` -o so so.c#include <glib-object.h>/* prototypes */#define SIMPLE_OBJECT_TYPE (simple_object_get_type ())#define SIMPLE_OBJECT (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), \ SIMPLE_OBJECT_TYPE, \ SimpleObject))GType simple_object_get_type ();typedef struct _SimpleObject SimpleObject;typedef struct _SimpleObjectClass SimpleObjectClass;typedef struct _SimpleObjectPrivate SimpleObjectPrivate;struct _SimpleObject { GObject parent; SimpleObjectPrivate *priv;};struct _SimpleObjectClass { GObjectClass parent_class;};/* ************* normally in a c file ************************ **/struct _SimpleObjectPrivate { int some_private_var;};G_DEFINE_TYPE (SimpleObject, simple_object, G_TYPE_OBJECT);static voidsimple_object_class_init (SimpleObjectClass *klass){ GObjectClass *gobject_class = G_OBJECT_CLASS (klass); SimpleObjectClass *so_class; g_type_class_add_private (klass, sizeof (SimpleObjectPrivate));}static voidsimple_object_init (SimpleObject *so){ so->priv = G_TYPE_INSTANCE_GET_PRIVATE (so, SIMPLE_OBJECT_TYPE, SimpleObjectPrivate);}//NOTE: normally we would do properties for thatvoidsimple_object_set_foo (SimpleObject *so, int foo){ SimpleObjectPrivate *priv; priv = so->priv; priv->some_private_var = foo;}intsimple_object_get_foo (SimpleObject *so){ SimpleObjectPrivate *priv; priv = so->priv; return priv->some_private_var;}intmain (int argc, char **argv){ SimpleObject *obj; g_type_init (); obj = g_object_new (SIMPLE_OBJECT_TYPE, NULL); //do something with it simple_object_set_foo (obj, 42); g_print ("Foo: %d\n", simple_object_get_foo (obj)); g_object_unref (obj); return 0;}