На самом деле, GTK_MISC
- это макрос, который скрывает "классический" тип C.Это, вероятно, что-то вроде:
#define GTK_MISC(p) ((GtkMisc *)(p))
Вместо этого вы могли бы просто написать:
gtk_misc_set_alignment ((GtkMisc *) label, 0, 0);
Я не знаю точно, почему GTK предоставляет такие макросы, возможно, им нравится "эмулировать"«подобие функции», предоставляемое C ++.
Edit
Хорошо, возможно, я понял.Я не нашел конкретной документации для GTK_MISC
, но, похоже, это то же самое, что и G_OBJECT
, которая гласит:
#define G_OBJECT(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), G_TYPE_OBJECT, GObject))
Casts aGObject
или производный указатель в (GObject*)
указатель.В зависимости от текущего уровня отладки эта функция может вызывать определенные проверки во время выполнения для выявления недопустимых приведений.
Таким образом, вероятно, GTK_MISC
также выполняет некоторые проверки времени выполнения для указателя, чтобы проверить, может ли он быть фактически приведен к GtkMisk *
.Вы могли бы сказать, что это в некоторой степени концепция dynamic_cast
в C ++.