2016-11-04 1 views
0

Хотя в противном случае работа с указателями, все функции Xlib, которые я видел до сих пор, передают их структуру Window по значению, а не по ссылке. Например .:Почему спецификация Xlib не использует указатели на struct Window?

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

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

Есть ли какое-либо конкретное Обоснование для этого? В частности, в случае XGetClassHint первый и третий параметры передаются по ссылке, а второй - нет.

+0

'Window' - это серверная штука, не правда ли? – unwind

ответ

2

Похоже, что 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; 
2

Window зверь, который живет на Х- Server, а не на клиенте. Единственное, что необходимо на клиенте, это идентификатор, который однозначно обращается к реальному окну на сервере. Это не структура, а ручка , или XID.