使用GTK进行C编程指针转换

问题描述 投票:1回答:1

看起来在GTK中你持有一个对象的引用,例如像GtkEntry,但是用一个指向GtkWidget的指针来保存它。例如

GtkWidget* pointer = gtk_entry_new();

然后,当你想要做一些像设置该条目的文本时,你必须调用一个函数并用该指针做一些事情。

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

几个问题:

  1. 什么是“GTK_ENTRY()”的东西?是函数调用还是类型转换?
  2. 为什么不用(GtkEntry *)指针?
  3. 甚至为什么这样做?为什么不在创建新条目时返回GtkEntry指针?
c pointers gtk x11 gtkentry
1个回答
3
投票

GTK_ENTRY是一个宏,表现得像一个函数。它将其参数转换为GtkEntry*,但它可能 - 取决于像NDEBUG这样的宏 - 做额外的检查以验证提供的参数可能被强制转换。

它在所有CAPITAL中,因为这是宏中C的一般约定。

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

© www.soinside.com 2019 - 2024. All rights reserved.