为什么 Xlib 规范不使用指向结构 Window 的指针?

Why does the Xlib specification does not use pointers to struct Window?

尽管在其他方面使用指针,但到目前为止我看到的所有 Xlib 函数都是按值而不是按引用传递它们的 Window 结构。例如:

https://tronche.com/gui/x/xlib/ICC/client-to-window-manager/XGetClassHint.html

https://tronche.com/gui/x/xlib/window/XDestroyWindow.html

这有什么特别的理由吗?特别是,在 XGetClassHint 的情况下,第一个和第三个参数是通过引用传递的,但第二个不是。

这些例子中的 Window 似乎不是结构;它只是一个无符号长整数。即,给定:

#include <X11/X.h>
Window w;

如果我通过 gcc -E 我看到:

$ gcc -E wintest.c | grep Window
typedef XID Window;
Window w;

XID是:

$ gcc -E wintest.c | grep XID
typedef unsigned long XID;

A Window 是一只生活在 X 服务器上而不是客户端上的野兽。客户端唯一需要的是唯一寻址服务器上真实 window 的标识符。这不是结构,而是 句柄,或 XID.