![]() |
![]() |
![]() |
GLib参考手册 | ![]() |
---|---|---|---|---|
Top | Description |
#include <glib.h> #define G_INLINE_FUNC #define G_STMT_START #define G_STMT_END #define G_BEGIN_DECLS #define G_END_DECLS #define G_N_ELEMENTS (arr) #define G_VA_COPY (ap1, ap2) #define G_STRINGIFY (macro_or_string) #define G_PASTE (identifier1, identifier2) #define G_STATIC_ASSERT (expr) #define G_GNUC_EXTENSION #define G_GNUC_CONST #define G_GNUC_PURE #define G_GNUC_MALLOC #define G_GNUC_ALLOC_SIZE (x) #define G_GNUC_ALLOC_SIZE2 (x, y) #define G_GNUC_DEPRECATED #define G_GNUC_DEPRECATED_FOR (f) #define G_GNUC_NORETURN #define G_GNUC_UNUSED #define G_GNUC_PRINTF (format_idx, arg_idx) #define G_GNUC_SCANF (format_idx, arg_idx) #define G_GNUC_FORMAT (arg_idx) #define G_GNUC_NULL_TERMINATED #define G_GNUC_WARN_UNUSED_RESULT #define G_GNUC_FUNCTION #define G_GNUC_PRETTY_FUNCTION #define G_GNUC_NO_INSTRUMENT #define G_HAVE_GNUC_VISIBILITY #define G_GNUC_INTERNAL #define G_GNUC_MAY_ALIAS #define G_LIKELY (expr) #define G_UNLIKELY (expr) #define G_STRLOC #define G_STRFUNC #define G_GINT16_MODIFIER #define G_GINT16_FORMAT #define G_GUINT16_FORMAT #define G_GINT32_MODIFIER #define G_GINT32_FORMAT #define G_GUINT32_FORMAT #define G_GINT64_MODIFIER #define G_GINT64_FORMAT #define G_GUINT64_FORMAT #define G_GSIZE_MODIFIER #define G_GSIZE_FORMAT #define G_GSSIZE_FORMAT #define G_GOFFSET_MODIFIER #define G_GOFFSET_FORMAT #define G_GINTPTR_MODIFIER #define G_GINTPTR_FORMAT #define G_GUINTPTR_FORMAT
# define G_INLINE_FUNC
这个宏用于导出函数原型,这样当非内联模式时,它们就能被链接
到一个非内联的扩展版本。执行函数的这个文件要在定义G_IMPLEMENTS_INLINTS
之前包含有G_INLINE_FUNC
声明的头文件。由于内联是非常依赖
编译器的,所以正确的使用这些宏非常难。强烈建议不要使用这
些宏。
此宏经常被误认为是inline关键字的替换;内联已经以一种可移 植的方式在glib头文件里声明,并且它能够被正常的使用。
# define G_BEGIN_DECLS extern "C" {
用于把头文件放在括号{}里(和G_END_DECLS一起使用)。如果
使用的编译器是一个C++编译器,就在头文件外添加
extern "C"
。
# define G_END_DECLS }
用于把头文件放在括号{}里(和G_END_DECLS一起使用)。如果
使用的编译器是一个C++编译器,就在头文件外添加
extern "C"
。
#define G_N_ELEMENTS(arr) (sizeof (arr) / sizeof ((arr)[0]))
确定数组中元素的个数。这个数组必须被声明以便编译器在编译 时知道它的大小;这个宏不能工作在堆上分配的数组上,只能应 用在静态数组或者在栈上的数组。
|
数组名 |
#define G_VA_COPY(ap1,ap2)
以可移植的方式复制 va_list 变量。
为了使用这个功能,你必须包含string.h
,因为这个宏可能使用
,而
GLib并没有包含memmove()
string.h
。
|
这个 va_list 变量用于存放ap2的一个副本。 |
|
一个 va_list 变量。 |
#define G_STRINGIFY(macro_or_string) G_STRINGIFY_ARG (macro_or_string)
接受一个宏或一个字符串转换成一个字符串后,并预处理参数扩展。 preprocessor argument expansion. For example, the following code:
#define AGE 27 const gchar *greeting = G_STRINGIFY (AGE) " today!";
is transformed by the preprocessor into (code equivalent to):
const gchar *greeting = "27 today!";
|
一个宏或者一个字符串。 |
#define G_PASTE(identifier1,identifier2) G_PASTE_ARGS (identifier1, identifier2)
生成一个新的预处理粘贴标识符'identifier1identifier2' 从它的形参 'identifier1' 和 'identifier2'。
#define GET(traveller,method) G_PASTE(traveller_get_, method) (traveller) const gchar *name = GET (traveller, name); const gchar *quest = GET (traveller, quest); GdkColor *favourite = GET (traveller, favourite_colour);
is transformed by the preprocessor into:
const gchar *name = traveller_get_name (traveller); const gchar *quest = traveller_get_quest (traveller); GdkColor *favourite = traveller_get_favourite_colour (traveller);
|
一个标识符 |
|
一个标识符 |
Since 2.20
#define G_STATIC_ASSERT(expr) typedef struct { char Compile_Time_Assertion[(expr) ? 1 : -1]; } G_PASTE (_GStaticAssert_, __LINE__)
G_STATIC_ASSERT 宏让程序员可以在代码编译时进行条件检查,该
条件必须在程序编译时是可计算的。
这个宏可以使用在任何使用 typedef
的地方。
这个宏只能在每个源代码行使用一次。
|
一个常量表达式。 |
Since 2.20
# define G_GNUC_EXTENSION __extension__
当使用 gcc 作为编译器时展开为
__extension__
。
这简单的告诉 gcc 当使用 -pedantic
参数进行编译时,对于以下的非标准代码不用做出警告。
#define G_GNUC_CONST
如果使用的是 gcc 编译器,就展开为
GNU C const
函数属性。将一个函数声明为const,
可以更好地对函数调用进行优化。 一个const函数不检查其参数
外的任何值,并且只影响到它的返回值。详见GNU C 文档。
一个函数的指针参数和此指针所指向的数据不能 被声明为const。同样的,一个调用非const函数的函数通常不能为const。 为一个const函数返回void是没意义的。
#define G_GNUC_PURE
如果使用的是 gcc 编译器,就展开为
GNU C pure
函数属性。将一个函数声明为pure,
可以更好地对函数调用进行优化。一个pure函数只影响它的返回值,
并且这个返回值只依赖于参数和/或全局变量。
详见GNU C 文档。
#define G_GNUC_MALLOC
如果使用的是 gcc 编译器,就展开为
GNU C malloc
函数属性。将一个函数声明为malloc,
可以更好地对函数调用进行优化。一个函数可以拥有malloc属性,
如果能确保在函数返回时,它返回的指针不是其他任意指针的别名的话
(实际上,这意味著分配新的内存)。
详见GNU C 文档。
Since 2.6
#define G_GNUC_ALLOC_SIZE(x) __attribute__((__alloc_size__(x)))
如果使用的是比较新版的 gcc 编译器,就展开为
GNU C alloc_size
函数属性。这个属性告诉编译器
此函数返回一个指针,该指针指向由函数参数x
th指定大小的
内存空间。
详见GNU C 文档。
|
分配指定大小内存的参数指数。 |
Since 2.18
#define G_GNUC_ALLOC_SIZE2(x,y) __attribute__((__alloc_size__(x,y)))
如果使用的是比较新版的 gcc 编译器,就展开为
GNU C alloc_size
函数属性。 这个属性告诉编译器
此函数返回一个指针,该指针指向由该函数的两个参数的乘积指定大小的
内存空间。
详见GNU C 文档。
|
分配指定大小内存的第一个参数指数。 |
|
分配指定大小内存的第二个参数指数。 |
Since 2.18
#define G_GNUC_DEPRECATED
如果使用的是 gcc 编译器,就展开为
GNU C deprecated
属性。
它可以用来标记某些类型定义,变量和函数是不鼓励使用的。
如果你使用了这些不鼓励使用的程序接口,当编译器使用
-Wdeprecated-declarations
选项编译时将
产生警告信息。
详见GNU C 文档。
Since 2.2
#define G_GNUC_DEPRECATED_FOR(f)
Like G_GNUC_DEPRECATED
, but names the intended replacement for the
deprecated symbol if the version of gcc in use is
new enough to support custom deprecation messages.
See the GNU C documentation for details.
|
the intended replacement for the deprecated symbol, such as the name of a function |
Since 2.25.3
#define G_GNUC_NORETURN
如果使用的是 gcc 编译器,就展开为
GNU C noreturn
函数属性。它用来声明
该函数没有返回值。它能够使函数得到优化,同时避免了可能
出现的编译警告。
详见GNU C 文档。
#define G_GNUC_UNUSED
如果使用的是 gcc 编译器,就展开为
GNU C unused
函数属性。它用来声明
该函数可能不会被使用。它避免了可能出现的编译警告。
详见GNU C 文档。
#define G_GNUC_PRINTF( format_idx, arg_idx )
如果使用的是 gcc 编译器,就展开为
GNU C format
函数属性。它用来声明
使用了可变数目参数的函数,就像
的语法一样。它允许编译器对传递给函数的参数进行类型检查。
详见GNU C 文档。
printf()
gint g_snprintf (gchar *string, gulong n, gchar const *format, ...) G_GNUC_PRINTF (3, 4);
|
对应格式字符串参数的索引。 (这个参数的取值从1开始)。 |
|
第一个格式化参数的索引。 |
#define G_GNUC_SCANF( format_idx, arg_idx )
如果使用的是 gcc 编译器,就展开为
GNU C format
函数属性。它用来声明
使用了可变数目参数的函数,就像
的语法一样。它允许编译器对传递给函数的参数进行类型检查。
详见GNU C 文档。
scanf()
|
对应格式字符串参数的索引。 (这个参数的取值从1开始)。 |
|
第一个格式化参数的索引。 |
#define G_GNUC_FORMAT( arg_idx )
如果使用的是 gcc 编译器,就展开为
GNU C format_arg
函数属性。
这个函数属性为
,
printf()
,scanf()
或者 strftime()
等类型的函数指定了
函数的格式化字符串,并且修改它,以便结果能传递给
strfmon()
, printf()
,
scanf()
或者 strftime()
等类型的函数(其他的参数则和它们未修改时一样,保持不变)。
详见GNU C 文档。
strfmon()
gchar *g_dgettext (gchar *domain_name, gchar *msgid) G_GNUC_FORMAT (2);
|
参数索引。 |
#define G_GNUC_NULL_TERMINATED __attribute__((__sentinel__))
如果使用的是 gcc 编译器,就展开为
GNU C sentinel
函数属性,或者 ""
如果不是如此的话。这个函数属性仅适用于可变参函数并且
指示编译器检查以一个明确的NULL
结束的参数列表。
详见GNU C 文档。
#define G_GNUC_WARN_UNUSED_RESULT
如果使用的是 gcc 编译器,就展开为
GNU C warn_unused_result
函数属性,
或者 "" 如果不是如此的话。如果一个函数的调用结果被忽
略的话,这个函数属性将使编译器发出一个警告。
详见GNU C 文档。
Since 2.10
#define G_GNUC_FUNCTION __FUNCTION__
G_GNUC_FUNCTION
has been deprecated since version 2.16 and should not be used in newly-written code. 请使用 G_STRFUNC 代替。
在所有的现代编译器上展开为 "" ,并且在gcc 2.x 版本上
展开为__FUNCTION__
。
不要使用它。
#define G_GNUC_PRETTY_FUNCTION __PRETTY_FUNCTION__
G_GNUC_PRETTY_FUNCTION
has been deprecated since version 2.16 and should not be used in newly-written code. 请使用 G_STRFUNC 代替。
在所有的现代编译器上展开为 "" ,并且在gcc 2.x 版本上
展开为__PRETTY_FUNCTION__
。
不要使用它。
#define G_GNUC_NO_INSTRUMENT
如果使用的是 gcc 编译器,就展开为
GNU C no_instrument_function
函数属性。
当编译器使用-finstrument-functions
选项
时,拥有这个属性的函数将不会被instrumented for profiling
(译者:instrumented for profiling 为性能跟踪的工具、方法、
程序等)。
详见GNU C 文档。
#define G_GNUC_INTERNAL __attribute__((visibility("hidden")))
这个属性能用来标记仅用于内部的库函数,它可以让编译器更加 高效的调用句柄函数。 请注意,静态函数不能使用这种方式来标记为内部函数。 详见GNU C 文档。
当使用的编译器支持GNU C 隐藏可见性属性时,这个宏被展开为
__attribute__((visibility("hidden")))
。
当使用 Sun Studio 编译器时,该宏被展开为__hidden
。
请注意,为了具备可移植性,这个属性应该放在函数声明的前面。 虽然 GCC 允许这个宏放在函数声明的后面,但是Sun Studio 不允许。
G_GNUC_INTERNAL void _g_log_fallback_handler (const gchar *log_domain, GLogLevelFlags log_level, const gchar *message, gpointer unused_data);
# define G_GNUC_MAY_ALIAS __attribute__((may_alias))
如果使用的是 gcc 编译器,就展开为
GNU C may_alias
函数属性。
拥有这个属性的数据类型将不会被进行基于类型别名的分析,
但将被假设为其他任意类型的别名,就像 char 类型。
详见GNU C 文档。
#define G_LIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 1))
这个宏指示编译器,表达式可能为一个真值。编译器可能针对 这个信息进行编译优化。
if (G_LIKELY (random () != 1)) g_print ("not one");
Returns : |
expr 的值 |
Since 2.2
#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
这个宏指示编译器,表达式可能不是一个真值。编译器可能针对 这个信息进行编译优化。
if (G_UNLIKELY (random () == 1)) g_print ("a random one");
|
表达式 |
Returns : |
expr 的值 |
Since 2.2
# define G_STRLOC __FILE__ ":" G_STRINGIFY (__LINE__) ":" __PRETTY_FUNCTION__ "()"
展开为一个用于确定当前代码位置的字符串。
#define G_GINT16_MODIFIER "h"
平台依赖长度修改量的转换符,用于读入和打印 gint16 或者 guint16 类型的值。这是一个串字面值,但不包括百分比符号, 这样的话你就可以在百分比符号和转换符之间添加精度和长度修改量, 并且追加一个转换符。
下例打印为 "0x7b";
gint16 value = 123; g_print ("%#" G_GINT16_MODIFIER "x", value);
Since 2.4
#define G_GINT16_FORMAT "hi"
这是一个平台依赖转换符,用于读入和打印 gint16 类型的值。 这是一个串字面值,但不包括百分比符号,这样的话你就可以在 百分比符号和转换符之间添加精度和长度修改量。
gint16 in; gint32 out; sscanf ("42", "%" G_GINT16_FORMAT, &in) out = in * 1000; g_print ("%" G_GINT32_FORMAT, out);
#define G_GUINT16_FORMAT "hu"
这是一个平台依赖转换符,用于读入和打印 guint16 类型的值。 见 G_GINT16_FORMAT 。
#define G_GINT32_MODIFIER ""
平台依赖长度修改量的转换符,用于读入和打印 gint32 或者 guint32 类型的值。 这是一个串字面值,见 G_GINT16_MODIFIER。
Since 2.4
#define G_GINT64_MODIFIER "ll"
平台依赖长度修改量的转换符,用于读入和打印 gint64 或者 guint64 类型的值。这是一个串字面。
一些平台不支持打印64位整数,尽管支持这个数据类型。 在这样的平台 G_GINT64_MODIFIER 是未定义的。
Since 2.4
#define G_GINT64_FORMAT "lli"
这是一个平台依赖转换符,用于读入和打印 gint64 类型的值。 见 G_GINT16_FORMAT 。
一些平台不支持读入和打印64位整数,尽管支持这个数据类型。
在这样的平台 G_GINT64_FORMAT 是未定义的。
请注意,scanf()
可能不支持64位整数,尽管定义了 G_GINT64_FORMAT。
因为它薄弱的错误处理,无论如何 scanf()
是不推荐解析的;
请考虑使用 g_strtoull()
代替它。
#define G_GUINT64_FORMAT "llu"
这是一个平台依赖转换符,用于读入和打印 guint64 类型的值。 见 G_GINT16_FORMAT 。
一些平台不支持读入和打印64位整数,尽管支持这个数据类型。
在这样的平台 G_GUINT64_FORMAT 是未定义的。
请注意,scanf()
可能不支持64位整数,尽管定义了 G_GINT64_FORMAT。
因为它薄弱的错误处理,无论如何 scanf()
是不推荐解析的;
请考虑使用 g_strtoull()
代替它。
#define G_GSIZE_MODIFIER ""
平台依赖长度修改量的转换符,用于读入和打印 gsize 或者 gssize 类型的值。这是一个串字面。
Since 2.6
#define G_GSIZE_FORMAT "u"
这是一个平台依赖转换符,用于读入和打印 gsize 类型的值。 见 G_GINT16_FORMAT 。
Since 2.6
#define G_GSSIZE_FORMAT "i"
这是一个平台依赖转换符,用于读入和打印 gssize 类型的值。 见 G_GINT16_FORMAT 。
Since 2.6
#define G_GOFFSET_MODIFIER G_GINT64_MODIFIER
平台依赖长度修改量的转换符,用于读入和打印 goffset 类型的值。 这是一个串字面。 见 G_GINT64_MODIFIER 。
Since 2.20
#define G_GOFFSET_FORMAT G_GINT64_FORMAT
这是一个平台依赖转换符,用于读入和打印 goffset 类型的值。 见 G_GINT64_FORMAT 。
Since: 2.20#define G_GINTPTR_MODIFIER ""
The platform dependent length modifier for conversion specifiers for scanning and printing values of type gintptr or guintptr. It is a string literal.
Since 2.22
#define G_GINTPTR_FORMAT "i"
This is the platform dependent conversion specifier for scanning and printing values of type gintptr.
Since 2.22
#define G_GUINTPTR_FORMAT "u"
This is the platform dependent conversion specifier for scanning and printing values of type guintptr.
Since 2.22