Этот вопрос связан с GLib для программирования c. Исходный код здесь: https://github.com/GNOME/glib/blob/master/glib/gslice.hGLib macro g_slice_new вопросы
В glist.h, я увидел _g_list_alloc0 макросъемки, и я хочу знать, как это implements.So я обратно дорожку.
#define _g_list_alloc0() g_slice_new0 (GList)
Далее назад отслеживание макро g_slice_new0
#define g_slice_new0(type) ((type*) g_slice_alloc0 (sizeof (type)))
Ok, обратно отслеживание
gpointer g_slice_alloc0 (gsize block_size) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(1);
Для G_GNUC_MALLOC, я нашел, что это на самом деле:
#define G_GNUC_MALLOC __attribute__((__malloc__))
#define G_GNUC_ALLOC_SIZE(x) __attribute__((__alloc_size__(x)))
Я смущен о la два макроса G_GNUC_MALLOC и G_GNUC_ALLOC_SIZE.
Могу ли я заменить G_GNUC_ALLOC_SIZE (1) и G_GNUC_MALLOC с:
__attribute__((__alloc_size__(1)))
__attribute__((__malloc__))
Таким образом, заменить макрос
gpointer g_slice_alloc0 (gsize block_size) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(1);
Макрос фактически определяет так:
gpointer g_slice_allo0 (gsize block_size)
__attribute__((__malloc__)) __attribute__((__alloc_size__(1)))
Мой вопрос: Что такое выражение
__attribute__((__malloc__)) __attribute__((__alloc_size__(1)))
работает или создается? Я думаю, это работает как
malloc(sizeof())
которые выделяют память на основе sizeof. Почему бы просто не использовать malloc (sizeof()) вместо этого завершенного выражения? Что такое
__attribute__
? Это зарезервированное ключевое слово для glib?
gpointer g_slice_alloc0 (gsize block_size) G_GNUC_MALLOC G_GNUC_ALLOC_SIZE(1);
Каков тип выражения? Это не макро или typedef. Является ли это функцией с макросом в качестве имени функции? Любой может проанализировать это для меня?
оригинальный ссылка здесь: https://github.com/GNOME/glib/blob/master/glib/gslice.h