如何从函数中告诉类型转换

MrD*_*ail 4 c gtk

在练习GTK +教程时,我遇到了如下所示的示例代码:

gtk_misc_set_alignment (GTK_MISC (label), 0, 0);
Run Code Online (Sandbox Code Playgroud)

所有作者代码在function和()之间都有一个空格,但是类型转换也是如此.显然gtk_misc_set_alignment()是一个函数,但是如何判断GTK_MISC(label)是函数还是类型转换?

抱歉,这是一个菜鸟问题,我是一个菜鸟程序员,提前致谢

Mat*_*lia 9

实际上,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,它说:

#define G_OBJECT(object)            (G_TYPE_CHECK_INSTANCE_CAST ((object), G_TYPE_OBJECT, GObject))
Run Code Online (Sandbox Code Playgroud)

GObject指针或派生指针强制转换为(GObject*)指针.根据当前的调试级别,此函数可以调用某些运行时检查来标识无效的强制转换.

因此,可能GTK_MISC也会对指针执行一些运行时检查,以检查它是否可以实际转换为a GtkMisk *.你可以说它在某种程度上是dynamic_castC++ 的概念.


pmg*_*pmg 5

使用括号内的类型完成类型转换

( type ) object         // typecast
identifier ( argument ) // function call
Run Code Online (Sandbox Code Playgroud)