HANDLE vs void *功能代码样式

时间:2014-03-12 19:37:16

标签: c

我正在写一个库,我有一个函数:AddObj(HANDLE obj)。 此函数的目的是添加不同类型的结构:

struct1
struct2
... etc

问题是: 关于代码风格,使用HANDLEVOID* 还是其他可能更好?

3 个答案:

答案 0 :(得分:2)

您应该使用GTK +使用的方法。

您应该遵循GTK +的主导,而不是您提出的任何一种方法。它们使用不透明的结构指针。

Let's take a look at part of GTKFrame's header file

struct      GtkFrame;
GtkWidget * gtk_frame_new              (const gchar *label);
void        gtk_frame_set_label        (GtkFrame *frame, const gchar *label);
void        gtk_frame_set_label_widget (GtkFrame *frame, GtkWidget *label_widget);
void        gtk_frame_set_label_align  (GtkFrame *frame, gfloat xalign, gfloat yalign);

请注意,您不能不小心将GTKWindow传递给采用GTKFrame的函数。这种方法仍然保留了不透明手柄的所有好处。

答案 1 :(得分:1)

我会坚持void *HANDLE过于笼统。如果您有特定类型的对象,并且您想使用" HANDLE"传递指向那些对象的指针不那么令人反感 - 例如WINDOWHANDLEMODELHANDLE分别为typedef' Window * and 'Model *

答案 2 :(得分:0)

如果您可以使用HANDLE,那是因为有人(可能是您的.h文件中的一个)说typedef void * HANDLE;

就个人而言,除非您使用的是根据HANDLEs定义其操作的库,否则我会坚持使用void *。这为其他程序员省去了查看HANDLE定义方式的麻烦。