2016-11-04 1 views
0

Bien que fonctionnant autrement avec des pointeurs, toutes les fonctions de Xlib que j'ai vues jusqu'ici passent leur struct de fenêtre par la valeur, pas par la référence. .: par exemple Pourquoi la spécification Xlib n'utilise pas de pointeurs sur struct Window?

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

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

Y at-il raison particulière à cela? En particulier, dans le cas de XGetClassHint, les premier et troisième paramètres sont passés par référence mais le second ne l'est pas.

+0

'Window' est un thingamabob côté serveur, n'est-ce pas? – unwind

Répondre

2

Il semble que Window dans ces exemples n'est pas une structure; c'est juste un non signé longtemps. Ainsi, compte tenu:

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

Si je passe que par gcc -E je vois:

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

Et XID est:

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

Un Window est une bête qui vit sur le X- Serveur, pas sur le client. La seule chose qui est nécessaire sur le client est un identifiant qui adresse uniquement la fenêtre réelle sur le serveur. Ce n'est pas une structure, mais plutôt un gérer, ou un XID.