Skip to content

emka.web.id

Menu
  • Home
  • Indeks Artikel
  • Tutorial
  • Tentang Kami
Menu

Frequently Used Macros on Glib

Posted on April 08, 2012 by Syauqi Wiryahasana
glib defines a number of familiar macros used in many C programs, shown in Figure 2-1. All of these should be self-explanatory. MIN()/MAX() return the smaller or larger of their arguments. ABS() returns the absolute value of its argument. CLAMP(x, low, high) means x, unless x is outside the range [low, high]; if x is below the range, low is returned; if x is above the range, high is returned. In addition to the macros shown in Figure 2-1, TRUE/FALSE/NULL are defined as the usual 1/0/((void*)0). [code lang="cpp"] #include <glib.h> MAX( a , b ); MIN( a , b ); ABS( x ); CLAMP( x , low , high ); [/code] Figure 2-1. Familiar C Macros There are also many macros unique to glib, such as the portable gpointer-to-gint and gpointer-to-guint conversions shown in Figure 2-2. Most of glib’s data structures are designed to store a gpointer. If you want to store pointers to dynamically allocated objects, this is the right thing. However, sometimes you want to store a simple list of integers without having to dynamically allocate them. Though the C standard does not strictly guarantee it, it is possible to store a gint or guint in a gpointer variable on the wide range of platforms glib has been ported to; in some cases, an intermediate cast is required. The macros in Figure 2-2 abstract the presence of the cast. Here’s an example: [code lang="cpp"] gint my_int; gpointer my_pointer; my_int = 5; my_pointer = GINT_TO_POINTER(my_int); printf("We are storing %d\n", GPOINTER_TO_INT(my_pointer)); [/code] Be careful, though; these macros allow you to store an integer in a pointer, but storing a pointer in an integer will not work. To do that portably, you must store the pointer in a long. (It’s undoubtedly a bad idea to do so, however.) [code lang="cpp"] #include <glib.h> GINT_TO_POINTER(p); GPOINTER_TO_INT(p); GUINT_TO_POINTER(p); GPOINTER_TO_UINT(p); [/code] Figure 2-2. Macros for storing integers in pointers Source: GTK Gnome Application Development
Seedbacklink

Recent Posts

TENTANG EMKA.WEB>ID

EMKA.WEB.ID adalah blog seputar teknologi informasi, edukasi dan ke-NU-an yang hadir sejak tahun 2011. Kontak: kontak@emka.web.id.

©2024 emka.web.id Proudly powered by wpStatically