| |
Справочное описание GLib | ||||
---|---|---|---|---|
|
#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_GNUC_EXTENSION #define G_GNUC_CONST #define G_GNUC_PURE #define G_GNUC_MALLOC #define G_GNUC_DEPRECATED #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_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_INLINE_FUNC
Этот макрос используется для экспорта прототипов функций, таким образом они могут быть связаны
с внешними версиями когда включение в заголовок (inlining) не выполнено. Файл который реализует
функции должен определить G_IMPLEMENTS_INLINES
перед включением заголовков которые содержат G_INLINE_FUNC
деклорации.
Так как inlining очень зависит от компилятора, правильно использовать этот макрос очень сложно.
Этот макрос часто принимается для замены ключевого слова; ключевое слово уже объявлено переносимым способом в glib заголовках и может использоваться обычно.
#define G_STMT_START
Используется внутри многооператорного макроса так чтобы он мог быть использован в местах, где компилятором ожидается только один оператор.
#define G_STMT_END
Используется внутри многооператорного макроса так чтобы он мог быть использован в местах, где компилятором ожидается только один оператор.
#define G_BEGIN_DECLS
Используется (наряду с G_END_DECLS) для ограничения (bracket) заголовочных файлов. Если используемый компилятор
это C++ компилятор, добавляется extern "C"
рядом с заголовком.
#define G_END_DECLS
Используется (наряду с G_BEGIN_DECLS) для ограничения заголовочных файлов. Если используемый компилятор
это C++ компилятор, добавляется extern "C"
рядом с заголовком.
#define G_N_ELEMENTS(arr) (sizeof (arr) / sizeof ((arr)[0]))
Определяет количество элементов в массиве. Массив должен быть объявлен чтобы компилятор знал его размер во время компиляции; этот макрос не будет работать на массиве распределённом в динамической памяти, только статические массивы или массивы в стеке.
arr : |
массив |
#define G_VA_COPY(ap1,ap2)
Переносимый способ копирования va_list переменных.
Чтобы использовать эту функцию, вы должны включить string.h
самостоятельно, потому что эта команда может использовать
, а GLib не включит memmove()
string.h
за вас.
ap1 : |
переменная va_list помещаемая в виде копии ap2 .
|
ap2 : |
va_list. |
#define G_STRINGIFY(macro_or_string) G_STRINGIFY_ARG (macro_or_string)
Принимает макрос или строку и преобразует в строку.
macro_or_string : |
макрос или строка. |
#define G_GNUC_EXTENSION
Расширение для __extension__
когда в качестве компилятора используется
gcc.
Это просто сообщает gcc не предупреждать о следующем
не стандартном коде когда выполняется компиляция с опцией -pedantic
.
#define G_GNUC_CONST
Расширение для GNU C const
параметра функции если компилятор
gcc. Объявляет функцию как константу включающую
лучшую оптимизацию вызываемой функции. Константная функция не проверяет никаких значений
кроме параметров, и влияет только на возвращаемое значение. Детали смотрите в документации GNU C.
Функция которая имеет указанные аргументы и проверяет указанные данные не должна объявляться константой. Аналогично, функция которая вызвана не константной функцией обычно не должна быть константной. Это не имеет смысла для функций констант возвращающих (void) пустое значение.
#define G_GNUC_PURE
Расширение для GNU C pure
параметра функции если компилятор
gcc.
Объявление функции как полное включение (pure enables) улучшает оптимизацию вызова функции.
Полные (pure) функции имеют влияние только на возвращаемое значение а возвращаемое значение
зависит только от параметров и/или глобальных переменных.
Детали смотрите в документации GNU C.
#define G_GNUC_MALLOC
Расширение для GNU C malloc
параметра функции если компилятор
gcc. Объявление функции с включением malloc улучшает
оптимизацию функции. Функция может иметь параметр malloc, если возвращаемый указатель гарантировано
не связан с любым другим указателем когда возвращается функцией
(на практике, это означает вновь распределяемую память).
Подробности смотрите в документации GNU C.
Начиная с версии 2.6
#define G_GNUC_DEPRECATED
Расширение для GNU C deprecated
параметра для компилятора
gcc.
Он может использоваться для маркировки определения типа (typedefs),
переменных и функций как устаревших.
Когда вызывается с опцией -Wdeprecated
, компилятор будет предупреждать
когда используется устаревший интерфейс.
Подробности смотрите в документации GNU C.
Начиная с версии 2.2
#define G_GNUC_NORETURN
Расширение для GNU C noreturn
параметра функции, если компилятор
gcc. Он используется для объявления функции
когда нет возвращаемого значения.
Включает оптимизацию функции и предотвращает возможные предупреждения компилятора.
Детали смотрите в документации GNU C.
#define G_GNUC_UNUSED
Расширение GNU C unused
параметра функции, если компилятор
gcc.
Используется для объявления функций которые никогда не используются.
Предотвращает возможные предупреждения компилятора. Подробности смотрите в документации GNU C.
#define G_GNUC_PRINTF( format_idx, arg_idx )
Расширение для GNU C format
параметра функции, если компилятор
gcc. Используется для объявления функций которые
принимают разное количество аргументов с таким же синтаксисом как у
.
Позволяет компилятору контролировать типы помещаемых аргументов в функцию.
Подробности смотрите в GNU C.
printf()
gint g_snprintf (gchar *string, gulong n, gchar const *format, ...) G_GNUC_PRINTF (3, 4);
format_idx : |
перечень аргументов соответствующий форматируемой строке. (Нумерация аргументов начинается с 1). |
arg_idx : |
первый из форматируемых параметров. |
#define G_GNUC_SCANF( format_idx, arg_idx )
Расширение GNU C format
параметра функции, если компилятор gcc.
Используется для объявления функций которые принимают переменное количество аргументов,
с таким же синтаксисом как у
.
Позволяет компилятору проверять тип помещаемых в функцию аргументов.
Подробности смотрите в документации GNU C.
scanf()
format_idx : |
перечень аргументов соответствующий форматируемой строке. (Нумерация аргументов начинается с 1). |
arg_idx : |
первый из форматируемых параметров. |
#define G_GNUC_FORMAT( arg_idx )
Расширение GNU C format_arg
параметра функции, если компилятор
gcc.
Этот атрибут функции определяет что функция принимает форматированную строку в стиле функций
, printf()
,
scanf()
или strftime()
и модифицирует так, чтобы результат можно было
поместить в strfmon()
,
printf()
,
scanf()
или strftime()
функцию
(с оставшимися параметрами в формате функции так же,
как если они были бы не модифицированной строкой).
Подробности смотрите в документации GNU C.
strfmon()
gchar *g_dgettext (gchar *domain_name, gchar *msgid) G_GNUC_FORMAT (2);
arg_idx : |
порядковый номер аргумента. |
#define G_GNUC_NULL_TERMINATED
Расширение GNU C sentinel
параметра функции, если компилятор
gcc, или "" если нет. Этот параметр функции применяется только к variadic функциям и инструктирует компилятор проверить что список аргументов завершается явным NULL
.
Подробности смотрите в документации GNU C.
Начиная с версии 2.8
#define G_GNUC_WARN_UNUSED_RESULT
Расширение GNU C warn_unused_ersult
параметра функции, если компилятор
gcc, или "" если нет. Этот параметр функции заставляет
компилятор сообщать предупреждение, если результат вызова функции игнорируется.
Подробности смотрите в документации GNU C.
Начиная с версии 2.10
#define G_GNUC_FUNCTION
Расширение GNU C __FUNCTION__
переменной, если компилятор
gcc, или "" если нет.
GNU C __FUNCTION__
переменная содержит имя текущей функции.
Подробности смотрите в документации GNU C.
#define G_GNUC_PRETTY_FUNCTION
Расширение для GNU C __PRETTY_FUNCTION__
переменной, если компилятор
gcc, или "" если нет.
GNU C __PRETTY_FUNCTION__
переменная содержит имя текущей функции.
Для C программ это тоже самое как переменная __FUNCTION__
,
но для C++ включается дополнительная информация, такая как прототип и класс функции.
Подробности смотрите в документации GNU C.
#define G_GNUC_NO_INSTRUMENT
Расширение GNU C no_instrument_function
параметра функции, если
компилятор gcc. Функция с этим параметром
не будет инструментом для профилирования, когда компилятор вызывается с опцией
-finstrument-functions
.
Подробности смотрите в документации GNU C.
#define G_HAVE_GNUC_VISIBILITY 1
Этот макрос определяется как 1, если компилятор поддерживает ELF видимость атрибутов (на данный момент только gcc).
Начиная с версии 2.6
#define G_GNUC_INTERNAL __attribute__((visibility("hidden")))
Расширение GNU C visibility(hidden)
параметра, если компилятор
поддерживает это (в настоящее время только gcc).
Этот параметр может использоваться для маркировки библиотечных функций как используемые только
внутри библиотеки, чтобы не создавать не эффективный ввод PLT.
Помните что статичные функции не нуждаются в подобной маркировки.
Подробности смотрите в документации GNU C.
Начиная с версии 2.6
#define G_LIKELY(expr)
Подсказывает компилятору что логическое выражение вероятно эквивалентно значению true. Компилятор может использовать эту информацию для оптимизации.
if (G_LIKELY (random()
!= 1))
g_print ("not one");
expr : |
логическое выражение |
Начиная с версии 2.2
#define G_UNLIKELY(expr)
Подсказывает компилятору что логическое выражение вероятно не равно значению true. Компилятор может использовать эту информацию для оптимизации.
if (G_UNLIKELY (random()
== 1))
g_print ("a random one");
expr : |
логическое выражение |
Начиная с версии 2.2
#define G_STRFUNC
Дополняется до строки идентифицирующей текущую функцию.
Начиная с версии 2.4
#define G_GINT16_MODIFIER "h"
Платформо-зависимая длина модификатора для создания преобразуемых модификаторов
printf()
для значений типов
gint16 или
guint16. Это строковые литералы,
но не включающие знак процента, так что вы можете добавить точность и длину модификатора
между знаком процента и преобразующим спецификатором и прибавить с переди преобразованный спецификатор.
Следующий пример печатает "0x7b";
gint16 value = 123; g_print ("%#" G_GINT16_MODIFIER "x", value);
Начиная с версии 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 ""
Платформо-зависимая длина модификатора для создания преобразуемых спецификаторов
printf()
для значений типов gint32 или guint32.
Смотрите также G_GINT16_MODIFIER.
Начиная с версии 2.4
#define G_GINT32_FORMAT "i"
Это платформо-зависимый спецификатор преобразования для сканирования и печати значений типа gint32. Смотрите также G_GINT16_FORMAT.
#define G_GUINT32_FORMAT "u"
Это платформо-зависимый спецификатор преобразования для сканирования и печати значений типа guint32. Смотрите также G_GINT16_FORMAT.
#define G_GINT64_MODIFIER "ll"
Зависящая от платформы длина модификатора для создания спецификаторов преобразования
printf()
для значений типов
gint64 или
guint64.
Смотрите также G_GINT16_MODIFIER.
Некоторые платформы не поддерживают печать 64 битных целочисленных, даже если поддерживают типы. На таких платформах G_GINT64_MODIFIER не определяется.
Начиная с версии 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_GUINT64_FORMAT определён. Из-за плохой обработки ошибок,
scanf()
не рекомендуется для использования в анализе так или иначе;
вместо неё возможно использование g_strtoull()
.
#define G_GSIZE_MODIFIER ""
Платформо-зависимая длина модификатора для создания спецификаторов
printf()
для значений типов
gsize или
gssize.
Смотрите также G_GINT16_MODIFIER.
Начиная с версии 2.6
#define G_GSIZE_FORMAT "u"
Это платформо-зависимый спецификатор преобразования для сканирования и печати значений типа gsize. Смотрите также G_GINT16_FORMAT.
Начиная с версии 2.6
#define G_GSSIZE_FORMAT "i"
Это платформо-зависимый спецификатор преобразования для сканирования и печати значений типа gssize. Смотрите также G_GINT16_FORMAT.
Начиная с версии 2.6
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |