1

似乎在 GTK 中您持有对对象的引用,例如像 an GtkEntry,但您使用指向 a 的指针持有它GtkWidget。例如

GtkWidget* pointer = gtk_entry_new();

然后,当您想要执行诸如设置该条目的文本之类的操作时,您必须调用一个函数并使用该指针执行某些操作。

gtk_entry_set_text(GTK_ENTRY(pointer), "hello");

几个问题:

  1. 什么是“GTK_ENTRY()”?它是函数调用还是类型转换?
  2. 为什么都是大写字母,为什么不做类似 (GtkEntry*)pointer 之类的东西?
  3. 为什么还要这样做?为什么在创建新条目时不返回 GtkEntry 指针?
4

1 回答 1

3

GTK_ENTRY 是一个宏,表现得像一个函数。它将其参数转换为GtkEntry*,但它可能(取决于 NDEBUG 之类的宏)进行额外检查以验证是否可以转换提供的参数。

它全部大写,因为这是 C 中宏的一般约定。

GTK 中的函数gtk_entry_new返回GtkWidget*而不是GtkEntry*更多的函数操作GtkWidget*,C 语言不提供继承,因此不能自动转换。

于 2014-08-26T19:55:19.540 回答