在练习GTK +教程时,我遇到了如下所示的示例代码:
gtk_misc_set_alignment (GTK_MISC (label), 0, 0);
Run Code Online (Sandbox Code Playgroud)
所有作者代码在function和()之间都有一个空格,但是类型转换也是如此.显然gtk_misc_set_alignment()是一个函数,但是如何判断GTK_MISC(label)是函数还是类型转换?
抱歉,这是一个菜鸟问题,我是一个菜鸟程序员,提前致谢
实际上,GTK_MISC是一个隐藏"经典"C类型的宏.它可能是这样的:
#define GTK_MISC(p) ((GtkMisc *)(p))
Run Code Online (Sandbox Code Playgroud)
你可以简单地写:
gtk_misc_set_alignment ((GtkMisc *) label, 0, 0);
Run Code Online (Sandbox Code Playgroud)
我不确切知道为什么GTK提供这样的宏,也许他们喜欢"模仿"C++提供的"类似函数"的演员.
编辑
好吧,也许我明白了.我没有找到具体的文档GTK_MISC,但它似乎完全相同G_OBJECT,它说:
Run Code Online (Sandbox Code Playgroud)#define G_OBJECT(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), G_TYPE_OBJECT, GObject))将
GObject指针或派生指针强制转换为(GObject*)指针.根据当前的调试级别,此函数可以调用某些运行时检查来标识无效的强制转换.
因此,可能GTK_MISC也会对指针执行一些运行时检查,以检查它是否可以实际转换为a GtkMisk *.你可以说它在某种程度上是dynamic_castC++ 的概念.
使用括号内的类型完成类型转换
( type ) object // typecast
identifier ( argument ) // function call
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
150 次 |
| 最近记录: |